Spring Security

举报
武师叔 发表于 2022/08/30 08:47:32 2022/08/30
【摘要】 Spring Security 基本概念spring security 的核心功能主要包括:认证 (你是谁) 授权 (你能干什么) 攻击防护 (防止伪造身份)其核心就是一组过滤器链,项目启动后将会自动配置。最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在spring security中一种过滤器处理一种认证方式。 <dependency...

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/**");
    }
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。