SpringSecurity的整体架构和配置方法
SpringSecurity的整体架构和配置方法
整体架构
SpringSecurity是基于过滤器链实现的,
要使用过滤器就要进行相应的配置
配置方法
每个过滤器都有自己的配置类我们一般在自己继承WebSecurityConfigurerAdapter类重写其config方法来配置,
当配置某个拦截器的开始一般从调用某个方法开始,如调用formLogin()就相当于是开始了UsernamePasswordAuthenticationFilter的配置,结束是以调用add方法结束,
protected void configure(HttpSecurity http) throws Exception {
// 该使用表单验证
//
// 配置登录注销路径
http.formLogin()
.loginProcessingUrl("/login")
.successHandler(authenticationSuccessHandler)
.failureHandler(authenticationFailHandler)
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessHandler(logoutSuccessHandler);
// 配置路由权限信息
//授权管理控制的方法,这个方法返回一个ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry对象。
// Security所有的权限控制都基于这个类进行控制
// 对请求进行授权 又是另外一个拦截器的配置
http.authorizeRequests()
// 进行 授权相关的拦截器的配置 FilterSecurityInterceptor 主要是 设置元数据的来源 访问决策管理器
.withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() {
@Override
public <O extends FilterSecurityInterceptor> O postProcess(O fsi) {
// 顾名思义 设置元数据的来源
fsi.setSecurityMetadataSource(securityMetadataSource());
//访问决策管理器
fsi.setAccessDecisionManager(accessDecisionManager());
return fsi;
}
})
// 通过的请求全部需要是已经被认证过的也就是用户已经登录了
.anyRequest().authenticated()
.and()
// 关闭跨站请求防护
.csrf().disable().exceptionHandling()
// 认证出现异常的处理
// 在使用的是表单登录开启UsernamePasswordAuthenticationFilter时就不会自己重定向到框架自定义的登录页面
.authenticationEntryPoint(authenticationEntryPoint)
// 授权出现异常的处理
.accessDeniedHandler(accessDeniedHandler)
.and()
.sessionManagement()
.maximumSessions(20)
.sessionRegistry(sessionRegistry());
}
第一次发表博客,内容可能有些错误还望大佬指教。图是拿大佬的
链接https://www.cnblogs.com/charlypage/articles/10809023.html