English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Spring Security bietet eigene Tags für JSP-Seiten an. Diese Tags werden verwendet, um sicherheitsrelevante Informationen im JSP abzurufen und Sicherheitsbeschränkungen anzuwenden.
Nachfolgende Tags werden verwendet, um die View-Ebene der Anwendung zu schützen.
Berechtigungs-Tag Authentifizierungstag Accesscontrollist-Marker Csrfinput-Tag CsrfMetaTags-Tag
Dieser Tag wird zu Authentifizierungszwecken verwendet. Er bewertet und überprüft, ob die Anfrage berechtigt ist.
Er verwendet zwei Attribute Zugriff und URL Um die Berechtigung der Anfrage zu überprüfen. Wir können diesen Tag anhand der Benutzerrolle bewerten.
Nur wenn das Attribut erfüllt ist, wird der Inhalt innerhalb dieses Tags angezeigt. Zum Beispiel.
<sec:authorize access="hasRole('ADMIN')"> Es wird nur angezeigt, wenn der Benutzer Administrator ist </sec:authorize>
Dieser Tag wird verwendet, um auf die Authentifizierung im sicheren Kontext zuzugreifen. Wenn die Authentifizierung ein Beispiel für das UserDetails-Objekt ist, kann er verwendet werden, um die Details des aktuellen Benutzers abzurufen. Zum Beispiel.
<sec:authentication property="principal.username">
Dieser Marker wird gemeinsam mit dem ACL-Modul von Spring Security verwendet. Er überprüft die erforderliche Berechtigungsliste eines bestimmten Domains. Er wird nur ausgeführt, wenn der aktuelle Benutzer alle Berechtigungen besitzt. Zum Beispiel.
<sec:accesscontrollist hasPermission="1,2"domainObject="${someObject}">"} wenn der Benutzer alle Berechtigungen hat, die durch die Werte "1" oder "2" auf dem angegebenen Objekt. </sec:accesscontrollist>
Dieses Tag wird verwendet, um CSRF-Token für HTML-Formulare zu erstellen. Um es zu verwenden, stellen Sie sicher, dass CSRF-Schutz aktiviert ist. Wir sollten dieses Tag in Tags innerhalb des Tags erstellen, um CSRF-Token zu erstellen. Zum Beispiel.
<form method="post" action="/some/action"> <sec:csrfInput /> Name:<br /> <input type="text" name="username" /> ... </form>
Es fügt Meta-Tags ein, die CSRF-Token, Formularfelder, Header-Namen und CSRF-Token-Werte enthalten. Diese Werte sind nützlich, um CSRF-Token im JavaScript der Anwendung zu setzen.
Das Tag sollte innerhalb der HTML-Tag platziert werden.
Um eines dieser Tags zu implementieren, müssen wir im Anwendungsumfeld das spring security taglib jar haben. Man kann es auch mit folgenden Maven-Abhängigkeiten hinzufügen.
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>5.0.4.RELEASE</version> </dependency>
In einer JSP-Seite können wir die folgenden Deklarationen verwenden, um die taglib zu verwenden.
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
Lassen Sie uns nun ein Beispiel sehen, wie diese Tags in einem Spring Security Maven-Projekt implementiert werden.
Wir verwenden STS (Spring Tools Suite), um ein Projekt zu erstellen. Siehe Beispiel.
Klicken Sie auf Fertig >Schaltfläche, die ein wie folgt gezeigtes Maven-Projekt erstellt:
Um Spring Security in einer Spring MVC-Anwendung zu konfigurieren, legen Sie bitte folgende vier Dateien in com.w3im codeboxVerzeichnis.
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 wird verwendet, um das Suffix der View-Datei-Position zu setzen.
//MvcWebApplicationInitializer.java
package com.w3codebox; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class MvcWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override geschützte Klasse<?>[] getRootConfigClasses() { return new Class[]{WebSecurityConfig.class}; } @Override protected Class<?>[] getServletConfigClasses() { // TOdo Auto-generated method stub return null; } @Override protected String[] getServletMappings() { return new String[]{"}/"}; } }
该类用于初始化servlet调度程序。
//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() { // sicherstellen, dass die Passwörter korrekt verschlüsselt werden 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")); } }
Nun, erstellen Sie einen Controller, um Anfragen zu verarbeiten und zu antworten.
//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="/", Methode=RequestMethod.GET) public String index() { return "index"; } @RequestMapping(value="/benutzer", Methode=RequestMethod.GET) public String user() { return "admin"; } @RequestMapping(value="/admin", Methode=RequestMethod.GET) public String admin() { return "admin"; } }
Erstellen Sie Ansichtsdateien (JSP) zur Anzeige der Ausgabe für den Benutzer. Wir haben bereits drei JSP-Dateien erstellt, siehe unten.
//index.jsp
<html> <head> <title>Startseite </title> </head> <body> <a href="user">Benutzer</a> <a href="admin">Admin</a> <br> <br> Willkommen auf der W3codebox! </body> </html>
//user.jsp
<html> <head> <meta http-equiv="Inhalt-Typ" inhalt="text/html; charset=UTF-8"> <title>Startseite </title> </head> <body> Willkommen auf der Benutzerseite! </body> </html>
//admin.jsp
Auf der Verwaltungsoberfläche verwenden wir den Authorize-Tag, der nur dann bewertet wird, wenn die angegebenen Rollen erfüllt sind.
<%@ taglib uri="http://www.springframework.org/security/tags" praefix="security" %><html> <head> <meta http-equiv="Inhalt-Typ" inhalt="text/html; charset=UTF-8"> <title>Startseite </title> </head> <body> Willkommen auf der Admin-Seite! <a href="logout">logout</a> <br><br> <security:authorize access="hatRolle('ADMIN')"> Hallo ADMIN </security:authorize> <security:csrfInput/> </body> </html>
Unser Projekt enthält die folgenden Abhängigkeiten, die für die Erstellung der Anwendung erforderlich sind.
//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>/groupId> <artifactId>maven-war-plugin/artifactId> <version>2.6</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml>/failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
Nachdem alle diese Dateien hinzugefügt wurden, sieht unser Projekt wie folgt aus:
Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie Läuft auf dem Server. Es zeigt dem Browser die folgenden Ausgaben an.
Durch Bereitstellung in AppSecurityConfig Klicken Sie auf Benutzer und melden Sie sich mit den in der Datei festgelegten Anmeldeinformationen an.
Nach dem erfolgreichen Login wird die folgende administrative Seite angezeigt. Beachten Sie hier, dass aufgrund der Benutzerrolle des angemeldeten Benutzers der Inhalt innerhalb der authorize-Schaltfläche nicht angezeigt wird.
Abmelden, melden Sie sich jetzt mit den Administrationsanmeldedaten als admin an.
Nach dem Login als admin, betrachten Sie bitte diese authorize-Schaltfläche zur Bewertung und zeigen Sie die folgenden Ausgaben an.