📜  Spring安全标签库

📅  最后修改于: 2020-12-05 03:13:23             🧑  作者: Mango

Spring Security JSP标签库

Spring Security为jsp页面提供了自己的标签。这些标记用于访问安全信息并在JSP中应用安全约束。

以下标记用于保护应用程序的视图层。

  • 授权标签
  • 认证标签
  • 访问控制列表标签
  • Csrfinput标签
  • CsrfMetaTags标签

授权标签

该标签用于授权目的。该标签评估并检查请求是否被授权。

它使用访问URL两个属性来检查请求授权。我们可以通过用户角色来评估此标签。

仅当满足该属性时,才会显示写入此标记内的内容。例如。


It will display only is user is admin

认证标签

该标签用于访问存储在安全上下文中的身份验证。如果Authentication是UserDetails对象的实例,则可用于获取当前用户的详细信息。例如。

 

访问控制列表标签

该标签与Spring Security的ACL模块一起使用。它检查指定域的必需权限列表。仅当当前用户拥有所有权限时,它才会执行。例如。


 If user has all the permissions represented by the values "1" or "2" on the given object.

CsrfInput标签

此标记用于为HTML表单创建CSRF令牌。要使用它,请确保已启用CSRF保护。我们应该将此标签放在

标签内以创建CSRF令牌。例如。


                
                Name:
...

CsrfMetaTags标签

它插入包含CSRF令牌,表单字段,标头名称和CSRF令牌值的元标记。这些值对于在应用程序中的JavaScript中设置CSRF令牌很有用。

此标记应放在HTML 标记内。

Spring Security Taglib JAR

要实现这些标签中的任何一个,我们必须在应用程序中具有spring security taglib jar。也可以使用以下Maven依赖项将其添加。


    org.springframework.security
    spring-security-taglibs
    5.0.4.RELEASE

Spring Security Taglib声明

在JSP页面中,我们可以使用以下声明来使用taglib。

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

现在,让我们看一个在Spring Security Maven项目中实现这些标签的示例。

我们正在使用STS(Spring工具套件)来创建项目。参见示例。

建立专案



单击完成按钮,它将创建一个如下所示的maven项目:

Spring安全配置

要在Spring MVC应用程序中配置Spring Security,请将以下四个文件放入com.javatpoint文件夹中。

AppConfig.java

package com.javatpoint;
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.javatpoint.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.javatpoint;

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[] { "/" };  
    }  
}

此类用于初始化servlet调度程序。

// SecurityWebApplicationInitializer.java

package com.javatpoint;
import org.springframework.security.web.context.*;  
public class SecurityWebApplicationInitializer  
    extends AbstractSecurityWebApplicationInitializer {  
  
}  

再创建一个用于创建用户的类,并对用户可访问性应用身份验证和授权。

// WebSecurityConfig.java

package com.javatpoint;

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.javatpoint")  
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.javatpoint.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

  
  
Home Page  
  
  
User Admin 

Welcome to Javatpoint!

// user.jsp

  
  
  
Home Page  
  
  
Welcome to user page!  
  
 

// admin.jsp

在管理页面中,我们使用了authorize标签来仅在满足给定角色时才进行评估。

<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security" %>  
  
 
Home Page  
  
  
Welcome to admin page!
logout 

Hello ADMIN

项目依赖

我们的项目包含构建应用程序所需的以下依赖项。

// pom.xml


  4.0.0
  com.javatpoint
  springtaglibrary
  0.0.1-SNAPSHOT
  war
    
    1.8  
    1.8  
  
  
    
            org.springframework  
            spring-webmvc  
            5.0.2.RELEASE  
          
          
        org.springframework.security  
        spring-security-web  
        5.0.0.RELEASE  
      

    org.springframework.security
    spring-security-core
    5.0.4.RELEASE



    org.springframework.security
    spring-security-taglibs
    5.0.4.RELEASE

    

    org.springframework.security
    spring-security-config
    5.0.4.RELEASE

          
  
    javax.servlet  
    javax.servlet-api  
    3.1.0  
    provided  
  
  
    javax.servlet  
    jstl  
    1.2  
  

  
    
      
          
            org.apache.maven.plugins  
            maven-war-plugin  
            2.6  
              
                false  
              
          
      
  

添加所有这些文件后,我们的项目如下所示:

运行应用程序

右键单击该项目,然后选择“在服务器上运行” 。它向浏览器显示以下输出。

通过提供在AppSecurityConfig文件中设置的凭据,单击“用户和登录名”。

成功登录后,它将显示如下的管理页面。在这里,请注意,由于登录用户具有角色USER,因此未显示写入authorize标记内的内容。

注销,然后通过提供管理员凭据以管理员身份登录。

以管理员身份登录后,请参阅这次的authorize标签进行评估,并显示以下输出。

下载示例