您的位置 首页 java

Java拦截器配置

前言:因为在javaweb的项目中需要对所有接口进行拦截,比如登录的时候,就需要判断如果没有登录过就不让访问该接口。

1,新建InterceptorConfig并实现WebMvcConfigurer接口

 

import org.springframework.context.annotation. Bean ;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 拦截器配置类
 */@ Configuration 
public class InterceptorConfig implements WebMvcConfigurer {

    @Bean
    public Interceptor initAuthInterceptor() {
        return new Interceptor();
    }

    @ Override 
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(initAuthInterceptor())
                //.addPathPatterns("/**")
                .addPathPatterns("/tree")
                .excludePathPatterns("/login/**")
                .excludePathPatterns("/login")
                .excludePathPatterns("/swagger-ui.html")
                .excludePathPatterns("/configuration/ui")
                .excludePathPatterns("/swagger-resources")
                .excludePathPatterns("/configuration/security")
                .excludePathPatterns("/v2/api-docs")
                .excludePathPatterns("/error")
                .excludePathPatterns("/webjars/**")
                .excludePathPatterns("/**/favicon.ico");
    }

}
  

2,新建Interceptor并且实现HandlerInterceptor接口

 


import org. slf4j .Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core. Redis Template;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.concurrent.TimeUnit;

/**
 * 拦截器
 */public class Interceptor implements HandlerInterceptor {

    private final static String TEST_TOKEN = "123456";
    private static Logger logger = LoggerFactory.getLogger(Interceptor.class);

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");

        //从Header中获取token
        String tokenFromHeader = request.getHeader("token");
        logger.info("拦截器获取到token为:" + tokenFromHeader);

        if (StringUtils.isEmpty(tokenFromHeader)) {
            response.getWriter().print("未提供token");
            return false;
        }
        //直接放行测试用的uid和token
        if (tokenFromHeader.equals(TEST_TOKEN)) {
            return true;
        }
        //从redis中通过用户信息获取token
        String user = (String) redisTemplate.opsForValue().get(tokenFromHeader);
        if (StringUtils.isEmpty(user)) {
            response.getWriter().print("未登录");
            return false;
        } else {
            // 如果存在token,则重置token的过期时间
            redisTemplate.expire(tokenFromHeader, Constant.EXPIRE_TIME, TimeUnit.MINUTES);
        }
        return true;
    }

}
  

文章来源:智云一二三科技

文章标题:Java拦截器配置

文章地址:https://www.zhihuclub.com/187456.shtml

关于作者: 智云科技

热门文章

网站地图