目录
一、跨域
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 拦截所有的请求
//.allowedOrigins("*")
.allowedOriginPatterns("*")
.allowCredentials(true)
.allowedMethods("*") // 允许跨域的方法,可以单独配置
.allowedHeaders("*"); // 允许跨域的请求头,可以单独配置
}
}
二、jwt实现鉴权
JWT则是轻量级的认证授权机制,基于JSON标准,常用于API调用中的身份验证。 Spring Security企业级应用较多,侧重于复杂的权限管理,而JWT则以简洁高效著称。 两者在使用时,Spring Security涉及用户认证授权和定制身份验证策略,JWT则涉及生成和匹配认证令牌。
<!-- 引入jwt依赖 用于生成jwt令牌 token鉴权使用-->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.4.0</version>
</dependency>
三、拦截器
1 定义拦截器规则
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.JWTVerifier;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
@Component
public class JwtInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//1、OPTIONS 请求放行
if (request.getMethod().equals("OPTIONS")) {
return true;
}
//2、、获取请求头中的token
String token = request.getHeader("Authorization");
if (token == null) {
response.setStatus(401);
return false;
}
//3、验证token是否合法
String ss=JWT.decode(token).getAudience().toString();
try {
//验证token是否合法
ss= JWT.decode(token).getAudience().toString();
} catch (Exception e) {
response.setStatus(401);
return false;
}
//4、如果token合法,将用户信息存储到request域中
request.setAttribute("userInfo", "用户信息");
//5、jwt验证token是否过期
JWTVerifier jwtveryfy = JWT.require(Algorithm.HMAC256("1234567890".getBytes())).build();
jwtveryfy.verify(token);
return true;
}
}
2 注册拦截器
注意:如果使用WebMvcConfigurationSupport会导致WebMvcConfigurer 的所有方法都失效
public class InterceptorConfig implements WebMvcConfigurer {
private static final String[] EXCLUDE_PATH = {"/login", "/register", "/", "/index", "/static/**"};
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(jwtIntercepter())
.excludePathPatterns(EXCLUDE_PATH);
}
@Bean
public JwtInterceptor jwtIntercepter() {
return new JwtInterceptor();
}
}
7670

被折叠的 条评论
为什么被折叠?



