写点什么

Spring Security

作者:武师叔
  • 2022 年 8 月 03 日
  • 本文字数:2043 字

    阅读完需:约 7 分钟

Spring Security

基本概念

spring security 的核心功能主要包括:


认证 (你是谁) 授权 (你能干什么) 攻击防护 (防止伪造身份)


其核心就是一组过滤器链,项目启动后将会自动配置。最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在 spring security 中一种过滤器处理一种认证方式。



    <dependency>        <groupId>org.springframework.security</groupId>        <artifactId>spring-security-test</artifactId>        <scope>test</scope>    </dependency>Copy to clipboardErrorCopied
复制代码

配置

Spring Security 的配置类,通过继承 WebSecurityConfigurerAdapter 类实现,可以重写一下三种方法。


@Configuration@EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled = true)public class WebSecurityConfig extends WebSecurityConfigurerAdapter {    @Override    public void configure(AuthenticationManagerBuilder auth) throws Exception {        //我代表代码    }    @Override    public void configure(HttpSecurity http) throws Exception {        //我代表代码    }    @Override    public void configure(WebSecurity web) throws Exception {        //我代表代码    }}Copy to clipboardErrorCopied
复制代码

配置全局信息

AuthenticationManagerBuilder 类用来配置全局的认证相关的信息:


  1. AuthenticationProvider :认证服务提供者

  2. UserDetailsService :认证用户(及其权限)


    @Override    public void configure(AuthenticationManagerBuilder auth) throws Exception {        // 添加后门        auth.authenticationProvider(backdoorAuthenticationProvider);        // 自定义AuthenticationProvider实例加入AuthenticationManager        auth.userDetailsService(backendSysUserDetailsServiceImpl).passwordEncoder(new BCryptPasswordEncoder());        auth.authenticationProvider(backendSysUserAuthenticationProvider);    }Copy to clipboardErrorCopied
复制代码

权限控制

HttpSecurity 类负责具体的权限控制规则配置。每配置相当于 xml 配置中的一个标签。


各种具体的认证机制的相关配置,OpenIDLoginConfigurer、AnonymousConfigurer、FormLoginConfigurer、HttpBasicConfigurer LogoutConfigurer RequestMatcherConfigurer:spring mvc style、ant style、regex style HeadersConfigurer: CorsConfigurer、CsrfConfigurer SessionManagementConfigurer: PortMapperConfigurer: JeeConfigurer: X509Configurer: RememberMeConfigurer: ExpressionUrlAuthorizationConfigurer: RequestCacheConfigurer: ExceptionHandlingConfigurer: SecurityContextConfigurer: ServletApiConfigurer: ChannelSecurityConfigurer: 此模块的 authenticationProvider 和 userDetailsService; SecurityFilterChain 控制。


    @Override    public void configure(HttpSecurity http) throws Exception {         http                .authorizeRequests()                .antMatchers("/",                        "/index",                        "/error"                ).permitAll()                .antMatchers("/user/**").hasRole("USER")                .antMatchers("/admin/**").hasRole("ADMIN")                .and()                .formLogin().loginPage("/login").defaultSuccessUrl("/user")                //TODO 自定义参数名称,与login.html中的参数对应                .usernameParameter("myusername").passwordParameter("mypassword")                .and()                .logout().logoutUrl("/logout").logoutSuccessUrl("/login")                //鉴权                .and()                .authorizeRequests()                .withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() {                    @Override                    public <O extends FilterSecurityInterceptor> O postProcess(O object) {                        object.setSecurityMetadataSource(backendSysRoleSecurityMetadataSourceImpl);                        object.setAccessDecisionManager(backendSysRoleAccessDecisionManagerImpl);                        return object;                    }                });    }Copy to clipboardErrorCopied
复制代码

忽略规则配置

WebSecurity 类负责全局请求忽略规则配置(比如静态文件、注册页面)、全局 HttpFirewall 配置、是否 debug 配置、全局 SecurityFilterChain 配置、privilegeEvaluator、expressionHandler、securityInterceptor。



@Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/css/**", "/js/**"); }
复制代码


发布于: 刚刚阅读数: 4
用户头像

武师叔

关注

每天丰富自己,去过自己想要的生活! 2022.04.28 加入

一个喜欢最新技术,研发的人工智能专业的大二学生,用自己的代码做一些有意义的事情! 目前大二结束有去大厂研发岗实习的计划,每天丰富自己的技术,去过自己想要的实习生活。

评论

发布
暂无评论
Spring Security_8月月更_武师叔_InfoQ写作社区