springsecurity入门介绍

文章目录
  1. 1. 需要实现UserDetails
  2. 2. 实现loadUserByUsername
  3. 3. PasswordEncoder 密码的认证
  4. 4. 继承WebSecurityConfigurerAdapter
  5. 5. 继承SecurityMetadataSource

Spring Security系列之一 简单介绍和实战 - 掘金

20210902#_【项目实践】一文带你搞定Spring Security + JWT - 1024搜-程序员专属的搜索引擎

Spring Session 中文文档 参考手册 中文版

springsecurity和shiro都是权限和认证的框架,目前公司有基于springsecurity开发集成包,目前使用结合使用过程梳理一下springsecurity的特性和注意事项和集成的要点

目前引入的springsecurity的

springsecurity -outh 2.2.2.6 和需要和session打交道的session-core和session-data-redis2.4.1

利用session-redis来存储session

Web系统中登录认证(Authentication)的核心就是凭证机制,无论是Session还是JWT,都是在用户成功登录时返回给用户一个凭证,后续用户访问接口需携带凭证来标明自己的身份。后端会对需要进行认证的接口进行安全判断,若凭证没问题则代表已登录就放行接口,若凭证有问题则直接拒绝请求。这个安全判断都是放在过滤器里统一处理的

一般需要实现

需要实现UserDetails

1
AuthUser extends User UserDetails, CredentialsContainer

实现loadUserByUsername

org.springframework.security.core.userdetails.UserDetailsService.loadUserByUsername

PasswordEncoder 密码的认证

1
2
3
4
5
@Bean
public PasswordEncoder passwordEncoder() {
// 这里我们使用bcrypt加密算法,安全性比较高
return new BCryptPasswordEncoder();
}

继承WebSecurityConfigurerAdapter

org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter

由 authenticationManager() 的默认实现用来尝试获取 AuthenticationManager。如果被覆盖,应该使用 AuthenticationManagerBuilder 来指定 AuthenticationManager。
authenticationManagerBean() 方法可用于将生成的 AuthenticationManager 公开为 Bean。 userDetailsServiceBean() 可用于公开使用 AuthenticationManagerBuilder 作为 Bean 创建的最后填充的 UserDetailsService。 UserDetailsService 也将自动填充到 HttpSecurity.getSharedObject(Class) 以与其他 SecurityContextConfigurer (即 RememberMeConfigurer )一起使用
例如,以下配置可用于在内存中注册身份验证,以公开内存中的 UserDetailsService:
UserDetailsService:
@Override
protected void configure(AuthenticationManagerBuilder auth) {
auth
// enable in memory based authentication with a user named
// “user” and “admin”
.inMemoryAuthentication().withUser(“user”).password(“password”).roles(“USER”).and()
.withUser(“admin”).password(“password”).roles(“USER”, “ADMIN”);
}

   // Expose the UserDetailsService as a Bean
   @Bean
   @Override
   public UserDetailsService userDetailsServiceBean() throws Exception {
       return super.userDetailsServiceBean();
   }

目前使用的方式设置认证的方式和控制那些需要被权限管理

继承SecurityMetadataSource

org.springframework.security.access.SecurityMetadataSource

1
实现动态的权限验证,当然要先要获取对应的资源,然后再将他们对应哪些角色可以访问的关系表示出来