English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Spring Security предоставляет свои собственные теги для страниц jsp. Эти теги используются для доступа к информации о безопасности в JSP и применения ограничений безопасности.
Следующие теги используются для защиты слоев视图 приложений.
Тег авторизации Тег аутентификации Тег Accesscontrollist Тег Csrfinput Тег CsrfMetaTags
Этот тег используется для целей авторизации. Этот тег оценивает и проверяет, авторизован ли запрос.
Он использует два атрибута access и URL Проверка авторизации запроса. Мы можем оценить этот тег по роли пользователя.
Содержимое, отображаемое в этом теге, будет видимо только при выполнении условий. Например.
<sec:authorize access="hasRole('ADMIN')"> Он будет отображать только если пользователь является администратором </sec:authorize>
Этот тег используется для доступа к аутентификации, хранящейся в безопасном контексте. Если Authentication является экземпляром объекта UserDetails, то он может быть использован для получения подробной информации о текущем пользователе. Например.
<sec:authentication property="principal.username">
Этот тег используется вместе с модулем 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>
Этот тег используется для создания CSRF-токена для HTML-формы. Чтобы использовать его, убедитесь, что CSRF-защита включена. Мы должны поместить этот тег в Тег внутри создает CSRF-токен. Например.
<form method="post" action="/some/action"> <sec:csrfInput /> Имя:<br /> <input type="text" name="username" /> ... </form>
Он вставляет метатег, содержащий CSRF-токен, поля формы, имя заголовка и значение CSRF-токена. Эти значения полезны для установки CSRF-токена в JavaScript в приложении.
Этот тег должен быть放在 тегах HTML.
Чтобы реализовать任何一个 из этих тегов,我们必须 иметь spring security taglib jar в приложении. Также можно добавить его с помощью следующих Maven-зависимостей.
</dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>5.0.4.RELEASE</version> </dependency>
В JSP-странице мы можем использовать следующие объявления для использования taglib.
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
Теперь让我们看看在Spring Security Maven проекте реализацию этих тегов.
Мы используем STS (Spring Tool Suite) для создания проектов. См. пример.
Нажмите Готово >кнопка, которая создаст Maven проект, как показано ниже:
Чтобы настроить 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 и покажите следующий вывод.