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

Spring Methodenebene Sicherheit

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:



Spring Security-Konfiguration

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"));
}  
}

Controller

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 ";  
    }
}

Ansichten

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>

Pakete verpacken

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>

Projektstruktur

Fügen Sie alle oben genannten Dateien hinzu, unser Projekt wird wie folgt aussehen:



Starten Sie den Server

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.



Benutzeranmeldung

Melde dich jetzt als Benutzer an.




Klicken Sie jetzt auf Aktualisierte Aufzeichnung, da der Benutzerrolle USER ist, lehnt der Server den Zugriff ab.