LiiuZeYu_branch
lzy 10 months ago
parent 1dc9ea7ad3
commit 58291f167d

@ -0,0 +1,59 @@
package com.yami.shop.security.common.adapter;
// 导入Spring框架中用于将方法标记为创建Bean的注解通过该注解定义的方法返回的对象会被Spring容器管理可在其他地方进行注入使用
import org.springframework.context.annotation.Bean;
// 导入Spring Security框架中用于配置基于Web的安全相关设置的类通过链式调用的方式可以配置如认证、授权、跨域、会话管理等多个方面的安全策略
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
// 导入Spring Security框架中用于启用Web安全功能的注解表明在当前应用中要开启Spring Security相关的Web安全配置机制
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
// 导入Spring Security框架中用于定义会话创建策略的枚举类此处配置为无状态STATELESS会话策略适用于基于Token的认证方式
import org.springframework.security.config.http.SessionCreationPolicy;
// 导入Spring Security框架中用于构建安全过滤链的核心接口配置好的安全规则最终会形成这样一个过滤链来处理进入应用的请求进行安全相关的检查和过滤操作
import org.springframework.security.web.SecurityFilterChain;
// 导入Spring框架中用于将类标记为组件的注解表明该类是一个Spring管理的组件会被自动扫描并实例化可在其他地方进行依赖注入使用
import org.springframework.stereotype.Component;
// 导入Spring框架中用于处理跨域相关的工具类此处用于判断请求是否是跨域预检请求OPTIONS请求以便对不同类型请求做不同的授权处理
import org.springframework.web.cors.CorsUtils;
/**
* MallWebSecurityConfigurerAdapterSpring SecurityWeb
* Spring Security使Spring Security
* Token
* SecurityFilterChain使
*
* @author
* @date 2022/3/25 17:33
*/
@Component
@EnableWebSecurity
public class MallWebSecurityConfigurerAdapter {
/**
* filterChain@BeanSecurityFilterChainSpring使Bean
*
*
* @param http HttpSecurityHTTP
* @return SecurityFilterChain Web
* @throws Exception HttpSecurity
*/
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// 关闭跨站请求伪造CSRF防护功能因为基于Token的认证方式下通常不需要CSRF防护Token本身就用于身份验证可避免此类安全风险
return http.csrf().disable().cors()
// 配置跨域相关设置,启用跨域支持(后续可能还需要配置更具体的跨域规则等,这里只是开启了基本的支持),
// 接着配置会话管理相关内容将会话创建策略设置为无状态STATELESS意味着服务器不会为客户端创建和维护会话状态
// 适用于基于Token的认证场景每次请求都通过携带Token来验证身份服务器不依赖会话来识别客户端
.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
// 配置请求授权相关规则对于跨域预检请求OPTIONS请求通过CorsUtils::isPreFlightRequest判断允许所有的此类请求通过
// 因为跨域预检请求主要是浏览器在正式发起跨域请求前进行的一种询问服务器是否允许跨域的请求,通常需要放行
.and().authorizeRequests().requestMatchers(CorsUtils::isPreFlightRequest).permitAll()
// 继续配置请求授权规则,对于所有其他请求(通过"/**"表示任意路径的请求也都允许通过这意味着在这个配置下没有进行严格的基于Spring Security自带认证授权的访问限制
// 可能后续会通过其他自定义的中间件或者业务逻辑来对请求进行更细致的权限判断等操作,此处只是简单放开了所有请求的访问权限
.and().authorizeRequests().requestMatchers(
"/**").permitAll().and().build();
}
}
Loading…
Cancel
Save