Spring Security HttpSecurity 配置详解:权限控制、认证、过滤器
这段代码是用来配置 Spring Security 的 HttpSecurity 的,其中包含了一些安全性配置的操作,如禁用 CSRF,禁用 HTTP 响应标头,设置认证失败处理类,设置会话管理策略等。还有一些 URL 的访问控制,如允许匿名访问的 URL、静态资源、Swagger 等;除此之外,所有请求都需要进行认证鉴权。最后,还添加了一些过滤器,如 Logout filter、JWT filter、CORS filter 等。
详细解释:
- 禁用 CSRF 和 HTTP 响应标头
httpSecurity
// CSRF禁用,因为不使用session
.csrf().disable()
// 禁用HTTP响应标头
.headers().cacheControl().disable().and()
这段代码禁用 CSRF 和 HTTP 响应标头,因为该应用使用的是基于 token 的认证方式,不需要使用 session。
- 认证失败处理类
// 认证失败处理类
httpSecurity.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
这段代码设置了认证失败的处理类,当用户认证失败时,会调用 unauthorizedHandler 来处理。
- 会话管理策略
// 基于token,所以不需要session
httpSecurity.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
这段代码设置了会话管理策略,因为使用的是基于 token 的认证方式,所以不需要 session,因此将 SessionCreationPolicy 设置为 STATELESS。
- 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/**。 - 除上面外的所有请求都需要进行认证鉴权。
- 添加 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
原文地址: https://www.cveoy.top/t/topic/nwjQ 著作权归作者所有。请勿转载和采集!