这段代码是用来配置 Spring Security 的 HttpSecurity 的,其中包含了一些安全性配置的操作,如禁用 CSRF,禁用 HTTP 响应标头,设置认证失败处理类,设置会话管理策略等。还有一些 URL 的访问控制,如允许匿名访问的 URL、静态资源、Swagger 等;除此之外,所有请求都需要进行认证鉴权。最后,还添加了一些过滤器,如 Logout filter、JWT filter、CORS filter 等。

详细解释:

  1. 禁用 CSRF 和 HTTP 响应标头
httpSecurity
        // CSRF禁用,因为不使用session
        .csrf().disable()
        // 禁用HTTP响应标头
        .headers().cacheControl().disable().and()

这段代码禁用 CSRF 和 HTTP 响应标头,因为该应用使用的是基于 token 的认证方式,不需要使用 session。

  1. 认证失败处理类
// 认证失败处理类
httpSecurity.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()

这段代码设置了认证失败的处理类,当用户认证失败时,会调用 unauthorizedHandler 来处理。

  1. 会话管理策略
// 基于token,所以不需要session
httpSecurity.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()

这段代码设置了会话管理策略,因为使用的是基于 token 的认证方式,所以不需要 session,因此将 SessionCreationPolicy 设置为 STATELESS

  1. URL 访问控制
// 过滤请求
httpSecurity.authorizeRequests()
        // 对于登录login 注册register 验证码captchaImage 允许匿名访问
        .antMatchers(
                "/login",
                "/register",
                "/captchaImage",
                "/syncSysUser",
                "/editor/**",
                "/activiti-explorer/**"
        ).permitAll()
        // 静态资源,可匿名访问
        .antMatchers(
                HttpMethod.GET,
                "/",
                "/*.html",
                "/**/*.html",
                "/**/*.css",
                "/**/*.js",
                "/**/*.ttf",
                "/**/*.woff",
                "/**/*.svg",
                "/**/*.eot",
                "/profile/**",
                "/processes/**"
        ).permitAll()
        //swagger 注释
        .antMatchers(
                "/swagger-ui.html", 
                "/swagger-resources/**", 
                "/webjars/**", 
                "/*/api-docs", 
                "/druid/**"
        ).permitAll()
        // 除上面外的所有请求全部需要鉴权认证
        .anyRequest().authenticated()
        .and()
        .headers().frameOptions().disable();

这段代码设置了 URL 访问控制策略,其中包含:

  • 允许匿名访问的 URL,包括 /login/register/captchaImage/syncSysUser/editor/**/activiti-explorer/**
  • 允许匿名访问的静态资源,包括 //*.html/**/*.html/**/*.css/**/*.js/**/*.ttf/**/*.woff/**/*.svg/**/*.eot/profile/**/processes/**
  • 允许匿名访问的 Swagger 资源,包括 /swagger-ui.html/swagger-resources/**/webjars/**/*/api-docs/druid/**
  • 除上面外的所有请求都需要进行认证鉴权。
  1. 添加 Logout filter、JWT filter、CORS filter
// 添加Logout filter
httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
// 添加JWT filter
httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
// 添加CORS filter
httpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class);

这段代码添加了一些过滤器,包括:

  • Logout filter:用于处理用户退出登录的请求。
  • JWT filter:用于验证 JWT token。
  • CORS filter:用于处理跨域请求。

总结

这段代码配置了 Spring Security 的 HttpSecurity,实现了以下功能:

  • 禁用 CSRF 和 HTTP 响应标头
  • 设置认证失败处理类
  • 设置会话管理策略
  • 设置 URL 访问控制策略
  • 添加 Logout filter、JWT filter、CORS filter
Spring Security HttpSecurity 配置详解:权限控制、认证、过滤器

原文地址: https://www.cveoy.top/t/topic/nwjQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录