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

Spring Security JSP-Tag-Bibliothek

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

Berechtigungs-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>

Authentifizierungstag

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

Accesscontrollist-Marker

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>

CsrfInput-Tag

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>

CsrfMetaTags-Tag

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.

Spring Security Taglib JAR

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>

Spring Security Taglib-Deklaration

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.

Projekt erstellen





Klicken Sie auf Fertig >Schaltfläche, die ein wie folgt gezeigtes Maven-Projekt erstellt:



Spring Security-Konfiguration

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

Controller

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

Ansicht

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>
 

Projektabhängigkeiten

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:


Anwendung ausführen

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.