详解spring security之httpSecurity使用示例

httpSecurity

类似于spring security的xml配置文件命名空间配置中的<http>元素。它允许对特定的http请求基于安全考虑进行配置。默认情况下,适用于所有的请求,但可以使用requestMatcher(RequestMatcher)或者其它相似的方法进行限制。

使用示例:

最基本的基于表单的配置如下。该配置将所有的url访问权限设定为角色名称为"ROLE_USER".同时也定义了内存认证模式:使用用户名"user"和密码“password”,角色"ROLE_USER"来认证。

 @Configuration
 @EnableWebSecurity
 public class FormLoginSecurityConfig extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
   http
    .authorizeRequests()
     .antMatchers("/").hasRole("USER")
     .and()
    .formLogin();
  }

  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
   auth
    .inMemoryAuthentication()
     .withUser("user")
       .password("password")
       .roles("USER");
  }
 }

 配置基于openId的认证方式

basic示例,不使用attribute exchange

    @Configuration
  @EnableWebSecurity
  public class OpenIDLoginConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .openidLogin()
      .permitAll();
   }

   @Override
   protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth
      .inMemoryAuthentication()
       // the username must match the OpenID of the user you are
       // logging in with
       .withUser("https://www.google.com/accounts/o8/id?id=lmkCn9xzPdsxVwG7pjYMuDgNNdASFmobNkcRPaWU")
        .password("password")
        .roles("USER");
   }
  }

下面展示一个更高级的示例,使用attribute exchange

  @Configuration
  @EnableWebSecurity
  public class OpenIDLoginConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .openidLogin()
      .loginPage("/login")
      .permitAll()
      .authenticationUserDetailsService(new AutoProvisioningUserDetailsService())
       .attributeExchange("https://www.google.com/.")
        .attribute("email")
         .type("http://axschema.org/contact/email")
         .required(true)
         .and()
        .attribute("firstname")
         .type("http://axschema.org/namePerson/first")
         .required(true)
         .and()
        .attribute("lastname")
         .type("http://axschema.org/namePerson/last")
         .required(true)
         .and()
        .and()
       .attributeExchange(".yahoo.com.")
        .attribute("email")
         .type("http://schema.openid.net/contact/email")
         .required(true)
         .and()
        .attribute("fullname")
         .type("http://axschema.org/namePerson")
         .required(true)
         .and()
        .and()
       .attributeExchange(".myopenid.com.")
        .attribute("email")
         .type("http://schema.openid.net/contact/email")
         .required(true)
         .and()
        .attribute("fullname")
         .type("http://schema.openid.net/namePerson")
         .required(true);
   }
  }

  public class AutoProvisioningUserDetailsService implements
    AuthenticationUserDetailsService<OpenIDAuthenticationToken> {
   public UserDetails loadUserDetails(OpenIDAuthenticationToken token) throws UsernameNotFoundException {
    return new User(token.getName(), "NOTUSED", AuthorityUtils.createAuthorityList("ROLE_USER"));
   }
  }

增加响应安全报文头

默认情况下当使用WebSecuirtyConfigAdapter的默认构造函数时激活。

仅触发Headers()方法而不触发其它方法或者接受WebSecurityConfigureerAdater默认的,等同于:

@Configuration
  @EnableWebSecurity
  public class CsrfSecurityConfig extends WebSecurityConfigurerAdapter {
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .headers()
      .contentTypeOptions();
      .xssProtection()
      .cacheControl()
      .httpStrictTransportSecurity()
      .frameOptions()
      .and()
     ...;
   }
  }

取消安全报文头,如下:

  @Configuration
  @EnableWebSecurity
  public class CsrfSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .headers().disable()
     ...;
   }
  }

使用部分安全报文头

触发headers()方法的返回结果,例如,只使用HeaderConfigurer的cacheControll()方法和HeadersConfigurer的frameOptions()方法.

  @Configuration
  @EnableWebSecurity
  public class CsrfSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .headers()
      .cacheControl()
      .frameOptions()
      .and()
     ...;
   }
  }

配置session管理

下面的配置展示了只允许认证用户在同一时间只有一个实例是如何配置的。若一个用户使用用户名为"user"认证并且没有退出,同一个名为“user”的试图再次认证时,第一个用户的session将会强制销毁,并设置到"/login?expired"的url。

  @Configuration
  @EnableWebSecurity
  public class SessionManagementSecurityConfig extends
    WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .anyRequest().hasRole("USER")
      .and()
     .formLogin()
      .permitAll()
      .and()
     .sessionManagement()
      .maximumSessions(1)
      .expiredUrl("/login?expired");
   }

   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth.
     inMemoryAuthentication()
      .withUser("user")
       .password("password")
       .roles("USER");
   }
  }

当使用SessionManagementConfigurer的maximumSessio(int)时不用忘记为应用配置HttpSessionEventPublisher,这样能保证过期的session能够被清除。

在web.xml中可以这样配置:

  <listener>
   <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>;
  </listener>

配置PortMapper

允许配置一个从HttpSecurity的getSharedObject(Class)方法中获取的PortMapper。当http请求跳转到https或者https请求跳转到http请求时(例如我们和requiresChanenl一起使用时),别的提供的SecurityConfigurer对象使用P诶账户的PortMapper作为默认的PortMapper。默认情况下,spring security使用PortMapperImpl来映射http端口8080到https端口8443,并且将http端口的80映射到https的端口443.

配置示例如下,下面的配置将确保在spring security中的http请求端口9090跳转到https端口9443 并且将http端口80跳转到https443端口。

  @Configuration
  @EnableWebSecurity
  public class PortMapperSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .formLogin()
      .permitAll()
      .and()
      // Example portMapper() configuration
      .portMapper()
       .http(9090).mapsTo(9443)
       .http(80).mapsTo(443);
   }

   @Override
   protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
       .password("password")
       .roles("USER");
   }
  }

配置基于容器的预认证

在这个场景中,servlet容器管理认证。

配置示例:

下面的配置使用HttpServletRequest中的principal,若用户的角色是“ROLE_USER”或者"ROLE_ADMIN",将会返回Authentication结果。

 @Configuration
  @EnableWebSecurity
  public class JeeSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     // Example jee() configuration
     .jee()
      .mappableRoles("ROLE_USER", "ROLE_ADMIN");
   }
  }

开发者希望使用基于容器预认证时,需要在web.xml中配置安全限制。例如:

 <login-config>
   <auth-method>FORM</auth-method>
   <form-login-config>
    <form-login-page>/login</form-login-page>
    <form-error-page>/login?error</form-error-page>
   </form-login-config>
  </login-config>

  <security-role>
   <role-name>ROLE_USER</role-name>
  </security-role>
  <security-constraint>
   <web-resource-collection>
   <web-resource-name>Public</web-resource-name>
    <description>Matches unconstrained pages</description>
    <url-pattern>/login</url-pattern>
    <url-pattern>/logout</url-pattern>
    <url-pattern>/resources/</url-pattern>
   </web-resource-collection>
  </security-constraint>
  <security-constraint>
   <web-resource-collection>
    <web-resource-name>Secured Areas</web-resource-name>
    <url-pattern>/</url-pattern>
   </web-resource-collection>
   <auth-constraint>
    <role-name>ROLE_USER</role-name>
   </auth-constraint>
  </security-constraint>

配置基于X509的预认证

配置示例,下面的配置试图从X509证书中提取用户名,注意,为完成这个工作,客户端请求证书需要配置到servlet容器中。

  @Configuration
  @EnableWebSecurity
  public class X509SecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     // Example x509() configuration
     .x509();
   }
  }

配置Remember-me服务

配置示例,下面的配置展示了如何允许基于token的remember-me的认证。若http参数中包含一个名为“remember-me”的参数,不管session是否过期,用户记录将会被记保存下来。

 @Configuration
  @EnableWebSecurity
  public class RememberMeSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER");
   }

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .formLogin()
      .permitAll()
      .and()
     // Example Remember Me Configuration
     .rememberMe();
   }
  }

限制HttpServletRequest的请求访问

配置示例,最基本的示例是配置所有的url访问都需要角色"ROLE_USER".下面的配置要求每一个url的访问都需要认证,并且授权访问权限给用户"admin"和"user".

@Configuration
  @EnableWebSecurity
  public class AuthorizeUrlsSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .formLogin();
   }

   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER")
        .and()
      .withUser("adminr")
        .password("password")
        .roles("ADMIN","USER");
   }
  }

同样,也可以配置多个url。下面的配置要求以/admin/开始的url访问权限为“admin”用户。

@Configuration
  @EnableWebSecurity
  public class AuthorizeUrlsSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/admin/**").hasRole("ADMIN")
      .antMatchers("/**").hasRole("USER")
      .and()
     .formLogin();
   }

   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER")
        .and()
      .withUser("adminr")
        .password("password")
        .roles("ADMIN","USER");
   }
  }

注意:匹配起效是按照顺序来的。因此如果下面的配置是无效的,因为满足第一个规则后将不会检查第二条规则:

  http
   .authorizeRequests()
    .antMatchers("/**").hasRole("USER")
    .antMatchers("/admin/**").hasRole("ADMIN")

增加CSRF支持

默认情况下,当使用WebSecurityConfigurerAdapter时的默认构造方法时CSRF是激活的。你可以使用如下方法关闭它:

  @Configuration
  @EnableWebSecurity
  public class CsrfSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .csrf().disable()
     ...;
   }
  }

增加logout支持

默认支持,当使用WebSecurityConfigurerAdapter时Logout是支持的。当用户发出“/logout”请求时,系统将会销毁session并且清空配置的rememberMe()认证,然后清除SecurityContextHolder,最后跳向logout成功页面或者登陆页面。

 @Configuration
  @EnableWebSecurity
  public class LogoutSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .formLogin()
      .and()
     // sample logout customization
     .logout()
      .logout()
       .deleteCookies("remove")
       .invalidateHttpSession(false)
       .logoutUrl("/custom-logout")
       .logoutSuccessUrl("/logout-success");
   }

   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER");
   }
  }

匿名用户控制

使用WebSecurityConfigurerAdapter时自动绑定。默认情况下,匿名用户有一个AnonymousAuthenticationToken标示,包含角色"ROLE_ANONYMOUS"。

下面的配置展示了如何指定匿名用户应该包含"ROLE_ANON".

    @Configuration
  @EnableWebSecurity
  public class AnononymousSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .formLogin()
      .and()
     // sample anonymous customization
     .anonymous()
      .authorities("ROLE_ANON");
   }

   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER");
   }
  }

基于表单的认证

若FormLoginConfigurer的loginpage(String)没有指定,将会产生一个默认的login页面。

示例配置:

@Configuration
  @EnableWebSecurity
  public class FormLoginSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/**").hasRole("USER")
      .and()
     .formLogin();
   }

   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER");
   }
  }

下面的示例展示了自定义的表单认证:

 @Configuration
  @EnableWebSecurity
  public class FormLoginSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .formLogin()
       .usernameParameter("j_username") // default is username
       .passwordParameter("j_password") // default is password
       .loginPage("/authentication/login") // default is /login with an HTTP get
       .failureUrl("/authentication/login?failed") // default is /login?error
       .loginProcessingUrl("/authentication/login/process"); // default is /login with an HTTP post
   }

   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER");
   }
  }

配置安全通道

为使配置生效,需至少配置一个通道的映射。

配置示例:

下面例子展示了如何将每个请求都使用https通道。

 @Configuration
  @EnableWebSecurity
  public class ChannelSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/**").hasRole("USER")
      .and()
     .formLogin()
      .and()
     .channelSecurity()
      .anyRequest().requiresSecure();
   }

   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER");
   }
  }

配置http 基本认证

配置示例:

 @Configuration
  @EnableWebSecurity
  public class HttpBasicSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/**").hasRole("USER").and()
      .httpBasic();
   }

   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
       .password("password")
       .roles("USER");
   }
  }

配置要触发的HttpRequest

重写RequestMatcher方法、antMatcher()z、regexMatcher()等。

配置示例

下面的配置使HttpSecurity接收以"/api/","/oauth/"开头请求。

 @Configuration
  @EnableWebSecurity
  public class RequestMatchersSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .requestMatchers()
      .antMatchers("/api/**","/oauth/**")
      .and()
     .authorizeRequests()
      .antMatchers("/**").hasRole("USER").and()
      .httpBasic();
   }

   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
       .password("password")
       .roles("USER");
   }
  }

下面的配置和上面的相同:

@Configuration
  @EnableWebSecurity
  public class RequestMatchersSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .requestMatchers()
      .antMatchers("/api/**")
      .antMatchers("/oauth/**")
      .and()
     .authorizeRequests()
      .antMatchers("/**").hasRole("USER").and()
      .httpBasic();
   }

   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
       .password("password")
       .roles("USER");
   }
  }

同样也可以这样使用:

@Configuration
  @EnableWebSecurity
  public class RequestMatchersSecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .requestMatchers()
      .antMatchers("/api/**")
      .and()
     .requestMatchers()
      .antMatchers("/oauth/**")
      .and()
     .authorizeRequests()
      .antMatchers("/**").hasRole("USER").and()
      .httpBasic();
   }

   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
       .password("password")
       .roles("USER");
   }
  }

小结:

本文是从httpSecurity代码中整理得来的,有助于对spring security的全面理解。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Security基于JWT实现SSO单点登录详解

    SSO :同一个帐号在同一个公司不同系统上登陆 使用SpringSecurity实现类似于SSO登陆系统是十分简单的 下面我就搭建一个DEMO 首先来看看目录的结构 其中sso-demo是父工程项目 sso-client .sso-client2分别对应2个资源服务器,sso-server是认证服务器 引入的pom文件 sso-demo <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&q

  • 使用Spring Security OAuth2实现单点登录

    1.概述 在本教程中,我们将讨论如何使用Spring Security OAuth和Spring Boot实现SSO - 单点登录. 我们将使用三个单独的应用程序: •授权服务器 - 这是中央身份验证机制 •两个客户端应用程序:使用SSO的应用程序 非常简单地说,当用户试图访问客户端应用程序中的安全页面时,他们将被重定向到首先通过身份验证服务器进行身份验证. 我们将使用OAuth2中的授权代码授权类型来驱动身份验证委派. 2.客户端应用程序 让我们从客户端应用程序开始;当然,我们将使用Sprin

  • SpringBoot + Spring Security 基本使用及个性化登录配置详解

    Spring Security 基本介绍 这里就不对Spring Security进行过多的介绍了,具体的可以参考官方文档 我就只说下SpringSecurity核心功能: 认证(你是谁) 授权(你能干什么) 攻击防护(防止伪造身份) 基本环境搭建 这里我们以SpringBoot作为项目的基本框架,我这里使用的是maven的方式来进行的包管理,所以这里先给出集成Spring Security的方式 <dependencies> ... <dependency> <groupI

  • SpringBoot2.0 整合 SpringSecurity 框架实现用户权限安全管理方法

    一.Security简介 1.基础概念 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring的IOC,DI,AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为安全控制编写大量重复代码的工作. 2.核心API解读 1).SecurityContextHolder 最基本的对象,保存着当前会话用户认证,权限,鉴权等核心数据.Secu

  • SpringBoot+Spring Security+JWT实现RESTful Api权限控制的方法

    摘要:用spring-boot开发RESTful API非常的方便,在生产环境中,对发布的API增加授权保护是非常必要的.现在我们来看如何利用JWT技术为API增加授权保护,保证只有获得授权的用户才能够访问API. 一:开发一个简单的API 在IDEA开发工具中新建一个maven工程,添加对应的依赖如下: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-b

  • spring Security的自定义用户认证过程详解

    首先我需要在xml文件中声明.我要进行自定义用户的认证类,也就是我要自己从数据库中进行查询 <http pattern="/*.html" security="none"/> <http pattern="/css/**" security="none"/> <http pattern="/img/**" security="none"/> <h

  • Spring Security Remember me使用及原理详解

    Remember me功能就是勾选"记住我"后,一次登录,后面在有效期内免登录. 先看具体配置: pom文件: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <group

  • 详解spring security之httpSecurity使用示例

    httpSecurity 类似于spring security的xml配置文件命名空间配置中的<http>元素.它允许对特定的http请求基于安全考虑进行配置.默认情况下,适用于所有的请求,但可以使用requestMatcher(RequestMatcher)或者其它相似的方法进行限制. 使用示例: 最基本的基于表单的配置如下.该配置将所有的url访问权限设定为角色名称为"ROLE_USER".同时也定义了内存认证模式:使用用户名"user"和密码&qu

  • 详解Spring Security 中的四种权限控制方式

    Spring Security 中对于权限控制默认已经提供了很多了,但是,一个优秀的框架必须具备良好的扩展性,恰好,Spring Security 的扩展性就非常棒,我们既可以使用 Spring Security 提供的方式做授权,也可以自定义授权逻辑.一句话,你想怎么玩都可以! 今天松哥来和大家介绍一下 Spring Security 中四种常见的权限控制方式. 表达式控制 URL 路径权限 表达式控制方法权限 使用过滤注解 动态权限 四种方式,我们分别来看.  1.表达式控制 URL 路径权

  • 详解spring security四种实现方式

    spring security实现方式大致可以分为这几种: 1.配置文件实现,只需要在配置文件中指定拦截的url所需要权限.配置userDetailsService指定用户名.密码.对应权限,就可以实现. 2.实现UserDetailsService,loadUserByUsername(String userName)方法,根据userName来实现自己的业务逻辑返回UserDetails的实现类,需要自定义User类实现UserDetails,比较重要的方法是getAuthorities()

  • 一文详解Spring Security的基本用法

    目录 1.引入依赖 2.用户名和密码在哪里设置 3.UserDetailsService接口详解 3.1JdbcDaoImpl实现类 3.2InMemoryUserDetailsManager实现类 3.3自定义实现类实现UserDetailsService接口 4.如何修改登录页面 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架, 提供了完善的认证机制和方法级的授权功能.是一款非常优秀的权限管理框架.它的核心是一组过滤器链,不同的功能经由不同的过滤器. 今天通

  • 详解Spring Security如何在权限中使用通配符

    目录 前言 1. SpEL 2. 自定义权限该如何写 3. 权限通配符 4. TienChin 项目怎么做的 前言 小伙伴们知道,在 Shiro 中,默认是支持权限通配符的,例如系统用户有如下一些权限: system:user:add system:user:delete system:user:select system:user:update … 现在给用户授权的时候,我们可以像上面这样,一个权限一个权限的配置,也可以直接用通配符: system:user:* 这个通配符就表示拥有针对用户的

  • 详解Spring Security中获取当前登录用户的详细信息的几种方法

    目录 在Bean中获取用户信息 在Controller中获取用户信息 通过 Interface 获取用户信息 在JSP页面中获取用户信息 在Bean中获取用户信息 Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (!(authentication instanceof AnonymousAuthenticationToken)) { String currentU

  • 详解Spring Security中权限注解的使用

    目录 1. 具体用法 2. SpEL 3. @PreAuthorize 最近有个小伙伴在微信群里问 Spring Security 权限注解的问题: 很多时候事情就是这么巧,松哥最近在做的 tienchin 也是基于注解来处理权限问题的,所以既然大家有这个问题,咱们就一块来聊聊这个话题. 当然一些基础的知识我就不讲了,对于 Spring Security 基本用法尚不熟悉的小伙伴,可在公众号后台回复 ss,有原创的系列教程. 1. 具体用法 先来看看 Spring Security 权限注解的具

  • 全面详解Spring Bean生命周期教程示例

    目录 Spring 中 Bean 的生命周期 Bean 的实例化 构造方法注入 工厂方法注入 Bean 的属性赋值 setter注入 构造方法注入 Bean 的初始化 初始化方法 InitializingBean 接口 Bean 的销毁 销毁方法 DisposableBean 接口 总结 Spring 中 Bean 的生命周期 是当今最流行的 Java 开发框架之一,其强大的 Bean容器机制是其中的核心之一.Bean 是指在 Spring 容器中被管理的对象,它们可以被注入到其他对象中,也可以

  • 详解Spring Security的Web应用和指纹登录实践

    前言 Java 开发人员在解决 Web 应用安全相关的问题时,通常会采用两个非常流行的安全框架,Shiro 和 Spring Security.Shiro 配置简单,上手快,满足一般应用的安全需求,但是功能相对单一.Spring Security 安全粒度细,与 Spring Framework 无缝集成,满足绝大多数企业级应用的安全需求,但是配置复杂,学习曲线陡峭. Spring Security 相对 Shiro 功能强大,并且 Spring Framework,Spring Boot,Sp

  • 详解spring security安全防护

    前言 xss攻击(跨站脚本攻击):攻击者在页面里插入恶意脚本代码,用户浏览该页面时,脚本代码就会执行,达到攻击者的目的.原理就是:攻击者对含有漏洞的服务器注入恶意代码,引诱用户浏览受到攻击的服务器,并打开相关页面,执行恶意代码. xss攻击方式:一.反射性攻击,脚本代码作为url参数提交给服务器,服务器解析执行后,将脚本代码返回给浏览器,最后浏览器解析执行攻击代码:二.存储性攻击,和发射性攻击的区别是,脚本代码存储在服务器,下次在请求时,不用再提交脚本代码.其中一个示例图如下所示: CSRF攻击

随机推荐