Spring Security系列之一 简单介绍和实战 - 掘金
20210902#_【项目实践】一文带你搞定Spring Security + JWT - 1024搜-程序员专属的搜索引擎
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 | @Bean |
继承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 | 实现动态的权限验证,当然要先要获取对应的资源,然后再将他们对应哪些角色可以访问的关系表示出来 |