English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Библиотека тегов Spring Security JSP

Spring Security предоставляет свои собственные теги для страниц jsp. Эти теги используются для доступа к информации о безопасности в JSP и применения ограничений безопасности.

Следующие теги используются для защиты слоев视图 приложений.

Тег авторизации Тег аутентификации Тег Accesscontrollist Тег Csrfinput Тег CsrfMetaTags

Тег авторизации

Этот тег используется для целей авторизации. Этот тег оценивает и проверяет, авторизован ли запрос.

Он использует два атрибута access и URL Проверка авторизации запроса. Мы можем оценить этот тег по роли пользователя.

Содержимое, отображаемое в этом теге, будет видимо только при выполнении условий. Например.

<sec:authorize access="hasRole('ADMIN')">
Он будет отображать только если пользователь является администратором
</sec:authorize>

Тег аутентификации

Этот тег используется для доступа к аутентификации, хранящейся в безопасном контексте. Если Authentication является экземпляром объекта UserDetails, то он может быть использован для получения подробной информации о текущем пользователе. Например.

<sec:authentication property="principal.username">

Тег Accesscontrollist

Этот тег используется вместе с модулем ACL Spring Security. Он проверяет необходимый список прав для указанной области. Он выполняется только при условии, что текущий пользователь обладает всеми правами. Например.

<sec:accesscontrollist hasPermission="1,2" domainObject="${someObject}">
 if user has all the permissions represented by the values "1" or "2" on the given object.
</sec:accesscontrollist>

Тег CsrfInput

Этот тег используется для создания CSRF-токена для HTML-формы. Чтобы использовать его, убедитесь, что CSRF-защита включена. Мы должны поместить этот тег в   Тег внутри создает CSRF-токен. Например.

<form method="post" action="/some/action">
                <sec:csrfInput />
                Имя:<br />
                <input type="text" name="username" />
                ...
        </form>

Тег CsrfMetaTags

Он вставляет метатег, содержащий CSRF-токен, поля формы, имя заголовка и значение CSRF-токена. Эти значения полезны для установки CSRF-токена в JavaScript в приложении.

Этот тег должен быть放在 тегах HTML.

JAR Spring Security Taglib

Чтобы реализовать任何一个 из этих тегов,我们必须 иметь spring security taglib jar в приложении. Также можно добавить его с помощью следующих Maven-зависимостей.

</dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>

Декларация Spring Security Taglib

В JSP-странице мы можем использовать следующие объявления для использования taglib.

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

Теперь让我们看看在Spring Security Maven проекте реализацию этих тегов.

Мы используем STS (Spring Tool Suite) для создания проектов. См. пример.

Создать проект





Нажмите Готово >кнопка, которая создаст Maven проект, как показано ниже:



Конфигурация Spring Security

Чтобы настроить Spring Security в приложении Spring MVC, поместите следующие четыре файла в в com.w3codeboxпапка.

AppConfig.java

package com.w3codebox;
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.ComponentScan;  
import org.springframework.context.annotation.Configuration;  
import org.springframework.web.servlet.config.annotation.EnableWebMvc;  
import org.springframework.web.servlet.view.InternalResourceViewResolver;  
import org.springframework.web.servlet.view.JstlView;  
  
@EnableWebMvc  
@Configuration  
@ComponentScan({"com.w3codebox.controller.*"})  
public class AppConfig {  
    @Bean  
    public InternalResourceViewResolver viewResolver() {  
        InternalResourceViewResolver viewResolver  
                          = new InternalResourceViewResolver();  
        viewResolver.setViewClass(JstlView.class);  
        viewResolver.setPrefix("/WEB-INF/views/");  
        viewResolver.setSuffix(".jsp");  
        return viewResolver;  
    }  
}

AppConfig используется для установки суффикса позиции视图 файлов.

//MvcWebApplicationInitializer.java

package com.w3codebox;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;  
public class MvcWebApplicationInitializer extends  
        AbstractAnnotationConfigDispatcherServletInitializer {  
    @Override  
    protected Class<?>[] getRootConfigClasses() {  
        return new Class[] { WebSecurityConfig.class };  
    }  
    @Override  
    protected Class<?>[] getServletConfigClasses() {  
        // Todo Auto-generated method stub  
        return null;  
    }  
    @Override  
    protected String[] getServletMappings() {  
        return new String[] { "/" };  
    }  
}

Этот класс используется для инициализации диспетчера сервлетов.

//SecurityWebApplicationInitializer.java

package com.w3codebox;
import org.springframework.security.web.context.*;  
public class SecurityWebApplicationInitializer  
    extends AbstractSecurityWebApplicationInitializer {  
  
}

Создать класс, предназначенный для создания пользователей и применения аутентификации и авторизации к доступности пользователей.

//WebSecurityConfig.java

package com.w3codebox;
import org.springframework.context.annotation.*;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;  
import org.springframework.security.config.annotation.web.configuration.*;  
import org.springframework.security.core.userdetails.*;
import org.springframework.security.core.userdetails.User.UserBuilder;  
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
@EnableWebSecurity  
@ComponentScan("com.w3codebox")  
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {  
  
@Bean  
public UserDetailsService userDetailsService() {
    // ensure the passwords are encoded properly
     UserBuilder users = User.withDefaultPasswordEncoder();
     InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
     manager.createUser(users.username("mohan").password("1mohan23").roles("USER").build());
     manager.createUser(users.username("admin").password("admin123").roles("ADMIN").build());
     return manager;
    } 
  
@Override  
protected void configure(HttpSecurity http) throws Exception {  
      
      http.authorizeRequests().
      antMatchers("/index","/").permitAll()
      .antMatchers("/admin","/user").authenticated()
      .and();
      .formLogin();
      .and();
      .logout();
      .logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
        
}  
}

Контроллер

Теперь создайте контроллер для обработки запросов и ответов.

//HomeController.java

package com.w3codebox.controller;
import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RequestMethod;
@Controller  
public class HomeController {  
    @RequestMapping(value="/", method=RequestMethod.GET)  
    public String index() {  
        return "index";  
    }  
    @RequestMapping(value="/user", method=RequestMethod.GET)  
    public String user() {  
       return "admin";
    }  
    @RequestMapping(value="/admin", method=RequestMethod.GET)  
    public String admin() {  
          
        return "admin";  
    }
}
 

Представление

Создайте файл представления (jsp), чтобы показать пользователю вывод. Мы уже создали три файла JSP, см. далее.

//index.jsp

<html>  
<head>  
<title>Стартовая страница</title>  
</head>  
<body>  
<a href="user">User</a> <a href="admin">Admin</a> <br> <br>
Добро пожаловать в w3codebox!  
</body>  
</html>
 

//user.jsp

<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Стартовая страница</title>  
</head>  
<body>  
Добро пожаловать на страницу пользователя!  
</body>  
</html>
 

//admin.jsp

В странице управления мы используем тег authorize, который оценивается только при выполнении условий заданной роли.

<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security" %><html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Стартовая страница</title>  
</head>  
<body>  
Добро пожаловать на страницу администратора!
<a href="logout">logout</a> <br><br>
<security:authorize access="hasRole('ADMIN')">
Привет, АДМИН
</security:authorize>
<security:csrfInput/>
</body>  
</html>
 

Зависимости проекта

Наш проект включает следующие зависимости, необходимые для 构建 应用程序。

//pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.w3codebox</groupId>
  <artifactId>springtaglibrary</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <properties>  
    <maven.compiler.target>1.8</maven.compiler.target>  
    <maven.compiler.source>1.8</maven.compiler.source>  
</properties>  
<dependencies>  
  </dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-webmvc</artifactId>  
            <version>5.0.2.RELEASE</version>  
        </dependency>  
        </dependency>  
        <groupId>org.springframework.security</groupId>  
        <artifactId>spring-security-web</artifactId>  
        <version>5.0.0.RELEASE</version>  
    </dependency>  
</dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-taglibs -->
</dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
</dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->  
</dependency>  
    <groupId>javax.servlet</groupId>  
    <artifactId>javax.servlet-api</artifactId>  
    <version>3.1.0</version>  
    <scope>provided</scope>  
</dependency>  
</dependency>  
    <groupId>javax.servlet</groupId>  
    <artifactId>jstl</artifactId>  
    <version>1.2</version>  
</dependency>  
<!-- https://mvnrepository.com/artifact/org.springframework/spring-framework-bom -->
</dependencies>  
  <build>  
    <plugins>  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-war-plugin</artifactId>  
            <version>2.6</version>  
            <configuration>  
                <failOnMissingWebXml>false</failOnMissingWebXml>  
            </configuration>  
        </plugin>  
    </plugins>  
</build>  
</project>
 

После добавления всех этих файлов наш проект выглядит следующим образом:


Запустить приложение

Щелкните правой кнопкой мыши проект и выберите  Запущено на сервере. Оно показывает браузеру следующий вывод.



Предоставляя в   AppSecurityConfig Клиенты, установленные в файле, нажмите на пользователя и войдите.



После успешного входа в систему он покажет следующую административную страницу. Обратите внимание, что поскольку пользователь имеет роль USER, содержимое, помеченное tag authorize, не отображается.



Выйти из системы, теперь войдите в систему с помощью учетных данных администратора под именем admin.



После входа в систему под именем admin, пожалуйста, оцените этот tag authorize и покажите следующий вывод.