• SpringBoot2.6.15 SpringSecurity配置


    /*

    package cab.bear.config.security;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.context.annotation.Bean;

    import org.springframework.security.authentication.AuthenticationManager;

    import org.springframework.security.config.annotation.ObjectPostProcessor;

    import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;

    import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;

    import org.springframework.security.config.annotation.web.builders.HttpSecurity;

    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

    import org.springframework.security.web.AuthenticationEntryPoint;

    import org.springframework.security.web.access.AccessDeniedHandler;

    import org.springframework.security.web.access.intercept.FilterSecurityInterceptor;

    import org.springframework.security.web.authentication.AuthenticationFailureHandler;

    import org.springframework.security.web.authentication.AuthenticationSuccessHandler;

    import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

    import cab.bear.config.security.filter.CodeAuthenticationFilter;

    import cab.bear.config.security.filter.JwtAuthenticationFilter;

    // 基于spring-boot 2.6.15,SpringSecurity配置类

    @EnableWebSecurity

    @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)

    public class WebSecurityConfigurerAdapterExte extends WebSecurityConfigurerAdapter {

    // 用于鉴定用户是否可以访问被保护的资源

    @Autowired

    AccessDecisionManagerImpl accessDecisionManagerImpl;

    // 用于设置受保护的资源信息数据源

    @Autowired

    FilterInvocationSecurityMetadataSourceImpl filterInvocationSecurityMetadataSourceImpl;

    @Autowired

    UserDetailsServiceImpl userDetailsServiceImpl;

    @Autowired

    AuthenticationFailureHandler authenticationFailureHandler;

    @Autowired

    AuthenticationSuccessHandler authenticationSuccessHandler;

    @Autowired

    AccessDeniedHandler accessDeniedHandler;

    @Autowired

    AuthenticationEntryPoint authenticationEntryPoint;

    @Bean

    JwtAuthenticationFilter jwtAuthenticationFilter() throws Exception {

    JwtAuthenticationFilter jwtAuthenticationFilter = new JwtAuthenticationFilter(authenticationManager());

    return jwtAuthenticationFilter;

    }

    @Bean

    CodeAuthenticationFilter codeAuthenticationFilter() throws Exception {

    return new CodeAuthenticationFilter();

    }

    @Override

    protected void configure(HttpSecurity httpSecurity) throws Exception {

    httpSecurity.cors(); // 允许跨域访问

    httpSecurity.csrf().disable(); // CSRF 禁用,因为不使用 session

    httpSecurity.formLogin()

    .loginProcessingUrl("/login")

    // 登录成功处理

    .successHandler(authenticationSuccessHandler)

    // 登录失败处理

    .failureHandler(authenticationFailureHandler)

    .usernameParameter("username")

    .passwordParameter("password")

    .permitAll();

    // 授予任何请求允许无条件访问

    // httpSecurity.authorizeRequests().anyRequest().permitAll();

    // 部分允许无条件访问

    // httpSecurity.authorizeRequests().antMatchers("/system/login", "/captcha/get", "/captcha/check").permitAll();

    // 其他需要鉴权认证

    // httpSecurity.authorizeRequests().anyRequest().authenticated();

    // 需要鉴权认证

    httpSecurity

    .authorizeRequests()

    .anyRequest()

    .authenticated()

    .withObjectPostProcessor(new ObjectPostProcessor() {

    @Override

    public O postProcess(O object) {

    object.setSecurityMetadataSource(filterInvocationSecurityMetadataSourceImpl);

    object.setAccessDecisionManager(accessDecisionManagerImpl);

    return object;

    }

    });

    // 没有认证

    httpSecurity.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint);

    // 没有权限处理

    httpSecurity.exceptionHandling().accessDeniedHandler(accessDeniedHandler);

    // 过滤器

    httpSecurity.addFilterBefore(codeAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);

    httpSecurity.addFilter(jwtAuthenticationFilter());

    }

    @Override

    protected void configure(AuthenticationManagerBuilder builder) throws Exception {

    builder.userDetailsService(userDetailsServiceImpl).passwordEncoder(bCryptPasswordEncoder());

    }

    @Bean

    BCryptPasswordEncoder bCryptPasswordEncoder() {

    return new BCryptPasswordEncoder();

    }

    @Bean

    public AuthenticationManager authenticationManagerBean() throws Exception {

    return super.authenticationManagerBean();

    }

    }

    */

  • 相关阅读:
    王道数据结构C语言双链表基本操作实现
    【Linux】Ubuntu安装QQ【教程】
    计算机网络层(2)
    Cmake 3.27.5 发布,开源构建系统
    mysql执行insert和update处理字段是数据库关键字的问题
    MFC Windows 程序设计[336]之历史记录编辑框(附源码)
    PyTorch - autograd自动微分
    计算机视觉基础(8)——齐次坐标系与相机内外参
    关键词排名查询-各大搜索引擎批量实时关键词排名查询
    掌握未来技术:一站式深度学习学习平台体验!
  • 原文地址:https://blog.csdn.net/phone13144830339/article/details/132812694