Spring Security 学习记录

开头
Spring Security 是spring项目之中的一个安全模块,选择Spring Security来保护web应用是一个非常好的选择。

核心类-过滤器

过滤器参考

类名用途
过滤器-WebAsyncManagerIntegrationFilter用来处理异步请求的安全上下文
过滤器-SecurityContextPersistenceFilter控制 SecurityContext 的在一次请求中的生命周期
过滤器-HeaderWriterFilter给 http 响应添加一些 Header,比如 X-Frame-Options
过滤器-CsrfFilter用于防止csrf攻击
过滤器-LogoutFilter用户登出过滤器
过滤器-UsernamePasswordAuthenticationFilter用于处理基于表单的登录请求,从表单中获取用户名和密码。
过滤器-ChannelProcessingFilter过滤哪些请求必须用 https 协议, 哪些请求必须用 http 协议
过滤器-ConcurrentSessionFilter断session是否过期以及更新最新的访问时间
过滤器-OAuth2AuthorizationRequestRedirectFilter处理 OAuth2 请求
过滤器-Saml2WebSsoAuthenticationRequestFilter基于 SMAL 的 SSO 单点登录请求认证过滤器
过滤器-X509AuthenticationFilterX509 认证过滤器。你可以通过 HttpSecurity#X509() 来启用和配置相关功能
过滤器-AbstractPreAuthenticatedProcessingFilter处理经过预先认证的身份验证请求的过滤器的基类
BasicAuthenticationFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter
SessionManagementFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
RememberMeAuthenticationFilter

核心类-认证

类名用途
AbstractUserDetailsAuthenticationProvider用户认证Provider
AuthenticationManager
ProviderManager
AuthenticationManager
UserDetailsService自定义用户类要实现该接口
InMemoryUserDetailsManager将用户数据源寄存在内存里
DaoAuthenticationProviderJDBC数据库型认证Provider
GrantedAuthority自定义权限需要实现该接口
HttpSecurity
AccessDecisionManager授权管理器 ,有:一票决定,一票否定,少数服从多数
GrantedAuthority
UsernamePasswordAuthenticationToken用户、密码Token认证
PasswordEncoder
StandardPasswordEncoder
BCryptPasswordEncoder

Spring Security 流程
在这里插入图片描述
部分类解读
1、HttpSecurity
HttpSecurity提供了很多配置相关的方法,例如, authorizeRequests()、formLogin()、httpBasic()和 csrf()。
authorizeRequests()方法实际上返回了一个URL 拦截注册器,我们可以调用它提供的anyanyRequest()、antMatchers()和regexMatchers()等方法来匹配系统的URL,并为其指定安全策略。

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/css/**").permitAll()
                .anyRequest().authenticated() //任何请求,登录后可以访问
                .and()
                .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/")
                .failureUrl("/login?error")
                .permitAll() //登录页面用户任意访问
                .and()
                .logout().permitAll(); //注销行为任意访问
        http.addFilterBefore(myFilterSecurityInterceptor, FilterSecurityInterceptor.class);
    }

表单登录配置模块提供了 successHandler()和 failureHandler()两个方法,分别处理登录成功和 登录失败的逻辑。

路由,角色权限控制:

http.authorizeRequests()
.antMatchers("/admin/api/**").hasRole("ADMIN")
.antMatchers("/user/api/**").hasRole("USER")
.antMatchers("/app/api/**").permitAll()
.anyRequest().authenticated().and()

基于内存用户认证

@Bean
public UserDetailsService userDetailsService()(
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();manager.createUser(User.withUsername("user").password("123").roles("USER").b uild());
manager.createUser(User.withUsername("admin").password("123").roles("USER", "ADMIN").build());
return manager;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值