@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 12:25:41 浏览: 176
根据您提供的代码,您已经正确地实现了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的生成、刷新和校验等操作,需要考虑到安全性、效率和易用性等方面的问题。
@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Resource private RedisTemplate redisTemplate; @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/stomp") //.setAllowedOrigins("") .setAllowedOriginPatterns("") .withSockJS(); } /** * 配置相关信息 * * @param registry */ @Override public void configureMessageBroker(MessageBrokerRegistry registry) { //表明在topic、queue这两个域上可以向客户端广播消息 registry.enableSimpleBroker("/topic", "/user"); //客户端向服务端发起请求时,需要以/app为前缀 registry.setApplicationDestinationPrefixes("/app"); //给指定用户发送一对一的消息前缀是/user registry.setUserDestinationPrefix("/user"); } @Override public void configureClientInboundChannel(ChannelRegistration registration) { registration.interceptors(new ChannelInterceptor() { @Override public Message<?> preSend(Message<?> message, MessageChannel channel) { StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); if (StompCommand.CONNECT.equals(accessor.getCommand())) { String authorization = accessor.getFirstNativeHeader("accessToken"); String userId = JWTUtil.getUserId(authorization); String verify = (String) redisTemplate.opsForValue().get(Constant.Store.REDIS_TOKEN_PREFIX + userId); if (null == verify) { throw new IllegalArgumentException("用户验证失败"); } } return message; } }); } } 帮我翻译下
这是一个WebSocket的配置类,使用了Spring框架中的@Configuration和@EnableWebSocketMessageBroker注解。其中,@Resource注解用于注入RedisTemplate对象。
类中的registerStompEndpoints方法用于注册STOMP端点,指定了连接的路径为“/stomp”,并且使用了SockJS作为传输协议。
configureMessageBroker方法用于配置消息代理,指定了可以向客户端广播消息的域名为“/topic”和“/user”,同时客户端向服务端发起请求时需要以“/app”为前缀。此外,该方法还配置了给指定用户发送一对一消息时的前缀为“/user”。
configureClientInboundChannel方法用于配置客户端入站通道,其中注册了一个ChannelInterceptor拦截器,用于在客户端发起连接请求时进行用户验证。具体实现是从StompHeaderAccessor中获取连接请求中的accessToken,解析出其中的userId,然后从Redis中获取对应的验证信息,如果验证失败则抛出IllegalArgumentException异常。
阅读全文