English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neben der Authentifizierung überprüft Spring Security auch die Autorisierung des angemeldeten Benutzers. Nach der Anmeldung wird der Zugriff auf Ressourcen durch die Rolle des Benutzers autorisiert.
Wenn wir in der Klasse WebSecurityConfig Benutzer erstellen, können wir auch die Rolle des Benutzers angeben.
Die Sicherheit, die auf Methodenebene angewendet wird, ist auf nicht autorisierte Benutzer beschränkt und nur für echte Benutzer erlaubt.
Lassen Sie uns ein Beispiel betrachten. Zunächst erstellen wir ein Maven-Projekt, indem wir detaillierte Informationen bereitstellen.
Das Projekt sah ursprünglich so aus:
Jetzt konfiguriere die Anwendung, um unautorisierte und nicht authentifizierte Benutzer zu verhindern. Es werden die vier in der folgenden Liste angegebenen Java-Dateien benötigt, um ein Paket com.w zu erstellen3codebox und setze sie darin.
//AppConfig.java
Diese Klasse dient dazu, den Suffix und Präfix der Ansicht unter der Hilfe des ViewResolvers zu setzen.
package com.w;3codebox; 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 horg.springframework.web.servlet.view.JstlView; @EnableWebMvc @Configuration @ComponentScan( {"com.w"3*" }) public class AppConfig { @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/Ansichten/"); viewResolver.setSuffix(".jsp"); return viewResolver; } }
//MvcWebApplicationInitializer.java.java
package com.w;3codebox; import horg.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-generierter Methodenstummel return null; } @Override protected String[] getServletMappings() { return new String[] {"/" };" } }
//SecurityWebApplicationInitializer.java
package com.w;3codebox; import org.springframework.security.web.context.*; public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { }
//WebSecurityConfig.java
Diese Klasse dient dazu, Benutzer zu erstellen und ihre Authentifizierung zu konfigurieren. Jedes Mal, wenn ein Benutzer auf die Anwendung zugreift, muss er sich anmelden.
package com.w;3codebox; import org.springframework.context.annotation.*; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; 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.w"3codebox") @EnableGlobalMethodSecurity(prePostEnabled=true) 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("irfan").password("user123").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 .and() .formLogin() .and() .logout() .logoutRequestMatcher(new AntPathRequestMatcher("/logout")); } }
Erstelle den Controller HomeController und füge ihn hinzu com.w3codebox.controller Paket.
//HomeController.java;
package com.w;3codebox.controller; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @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"; } // Nur eine Person mit ADMIN-Rolle kann auf diese Methode zugreifen. @RequestMapping(value="/update, method=RequestMethod.GET) @ResponseBody @PreAuthorize("hasRole('ROLE_ADMIN')") public String update() { return "record updated "; } }
Erstellen Sie die folgenden Ansichten (JSP-Seiten), um Ausgaben für Benutzer zu generieren. Legen Sie alle Ansichten in WEB-INF/Ansichten Ordner.
//index.jsp
<html> <head> <title>Home Page</title> </head> <body> Welcome to w3codebox! <br> <br> Login as: <a href="admin">Admin</a> <a href="user">User</a> </body> </html>
//admin.jsp
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Home Page</title> </head> <body> <span style="color: grün">Login Successful!/span> ? <a href="logout" style="text-decoration: none;">abmelden</a> <br> <br> <a href="update" style="text-decoration: none;">Aktualisieren Sie das Protokoll</a> </body> </html>
Hier sind die Abhängigkeiten aufgelistet, die für die Erstellung dieses Projekts erforderlich sind.
<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>springmethod</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-config --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>5.0.4.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> <!-- 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>/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>
Fügen Sie alle oben genannten Dateien hinzu, unser Projekt wird wie folgt aussehen:
Ausgabe:
Erste Anmeldung als ADMIN
Nach der Anmeldung
Klicken Sie auf Aktualisierte Aufzeichnung, um zu überprüfen, ob die Aufzeichnung aktualisiert wurde, da die Benutzerrolle ADMIN ist.
Melde dich jetzt als Benutzer an.
Klicken Sie jetzt auf Aktualisierte Aufzeichnung, da der Benutzerrolle USER ist, lehnt der Server den Zugriff ab.