@Configuration public class SaTokenConfigure implements WebMvcConfigurer { // 注册拦截器 @Override public void addInterceptors(InterceptorRegistry registry) { // 注册 Sa-Token 拦截器,校验规则为 StpUtil.checkLogin() 登录校验。 registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin())) .addPathPatterns("/**") .excludePathPatterns("/user"); //白名单,只放行登录的白名单。 } }
时间: 2024-04-16 11:25:41 浏览: 25
根据您提供的代码,您已经正确地实现了WebMvcConfigurer接口,并注册了拦截器。在这个配置类中,您注册了一个Sa-Token拦截器,用于对请求进行登录校验。
根据您的配置,拦截器会对所有的请求进行校验,除了路径为 "/user" 的请求。这样,除了 "/user" 路径的请求会被放行,其他请求都会被拦截并进行登录校验。
如果您发现没有拦截效果,可以检查以下几个方面:
1. 确保Sa-Token相关依赖已经正确引入:您需要在项目的依赖文件(如pom.xml)中添加Sa-Token相关的依赖,以确保Sa-Token的功能可用。
2. 检查拦截器的执行顺序:如果您同时配置了多个拦截器,确保Sa-Token拦截器的执行顺序正确。您可以通过`registry.order()`方法来设置拦截器的执行顺序。
3. 确认请求路径是否匹配:请确保您的请求路径与拦截器配置的路径匹配。例如,如果您想拦截所有路径,可以使用`/**`来匹配。
如果仍然存在问题,请提供更多的代码和详细描述,以便我更好地帮助您解决问题。
相关问题
@Configuration public class MvcConfig implements WebMvcConfigurer { @Resource private StringRedisTemplate stringRedisTemplate; @Override public void addInterceptors(InterceptorRegistry registry) { // 登录拦截器 registry.addInterceptor(new LoginInterceptor()) .excludePathPatterns( "/shop/**", "/voucher/**", "/shop-type/**", "/upload/**", "/blog/hot", "/user/code", "/user/login" ).order(1); // token刷新的拦截器 registry.addInterceptor(new RefreshTokenInterceptor(stringRedisTemplate)).addPathPatterns("/**").order(0); } }
这段代码是一个配置类,实现了WebMvcConfigurer接口,主要是配置了两个拦截器:登录拦截器和Token刷新拦截器。
其中,登录拦截器(LoginInterceptor)用于拦截需要登录才能访问的接口,如果用户没有登录,则跳转到登录页面。在excludePathPatterns方法中,指定了一些不需要登录即可访问的接口,如/shop/**、/user/code等。
Token刷新拦截器(RefreshTokenInterceptor)用于在用户每次请求时检查用户的Token是否过期,如果过期,则自动刷新Token,并将新Token存储到Redis缓存中。这里使用了Spring提供的StringRedisTemplate类来操作Redis缓存。
需要注意的是,这段代码仅仅是一个示例,实际开发中需要根据具体的业务需求和安全策略来选择合适的拦截器和实现方式。同时,对于Token的生成、刷新和校验等操作,需要考虑到安全性、效率和易用性等方面的问题。
springboot项目使用拦截器修改/添加前端传输到后台header和cookie参数
可以通过编写拦截器来实现修改/添加前端传输到后台的header和cookie参数。
首先,定义一个拦截器类,实现 HandlerInterceptor 接口,并在其中重写 preHandle 方法。在 preHandle 方法中,可以通过 request.getHeader() 和 request.getCookies() 方法获取前端传输过来的 header 和 cookie 参数,然后进行修改/添加,最后再通过 response.setHeader() 和 response.addCookie() 方法将修改后的参数传输到后台。
下面是一个简单的示例:
```java
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 获取前端传输过来的 header 参数
String token = request.getHeader("token");
// 修改/添加 header 参数
response.setHeader("token", "newToken");
// 获取前端传输过来的 cookie 参数
Cookie[] cookies = request.getCookies();
// 修改/添加 cookie 参数
Cookie cookie = new Cookie("newCookie", "cookieValue");
response.addCookie(cookie);
// 返回 true 表示继续执行后续的处理器和拦截器
return true;
}
}
```
然后,在 Spring Boot 项目中配置拦截器,可以通过实现 WebMvcConfigurer 接口,在 addInterceptors 方法中添加拦截器:
```java
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CustomInterceptor()).addPathPatterns("/**");
}
}
```
这样,当前端发送请求时,拦截器就会拦截请求,并修改/添加前端传输到后台的 header 和 cookie 参数。