配置类:
package com.entor.config;
import com.entor.filter.TokenFilter;
import com.entor.interceptor.TokenInterceptor;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
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;
import java.util.Arrays;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TokenInterceptor())
.excludePathPatterns("/login")
.addPathPatterns("/**");
}
@Bean
public FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new TokenFilter());
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}
拦截器:
package com.entor.interceptor;
import com.entor.util.JWTUtils;
import com.entor.util.Result;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
public class TokenInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("Authorization");
if(token==null||token.equals("")){
throw new Exception("用户未登录");
}
Result result = JWTUtils.checkToken(token);
if(result.getCode()!=0){
throw new Exception(result.getMsg());
}
Map<String,Object> data = (Map<String,Object>)result.getData();
String username = (String)data.get("username");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
过滤器:
package com.entor.filter;
import com.entor.util.*;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
public class TokenFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse)servletResponse;
String path = request.getRequestURL() + (request.getQueryString()==null?"":"?" + request.getQueryString());
System.out.println("path:"+path);
if(path.contains("login")){
filterChain.doFilter(request,response);
return;
}
String token = request.getHeader("Authorization");
if(token==null||token.equals("")){
PrintUtil.print(response, ResultUtil.error(ErrorEnum.UN_LOGIN));
return;
}
Result result = JWTUtils.checkToken(token);
if(result.getCode()!=0){
PrintUtil.print(response, ResultUtil.error(ErrorEnum.TOKEN_OVERDUE));
return;
}
Map<String,Object> data = (Map<String,Object>)result.getData();
String username = (String)data.get("username");
filterChain.doFilter(request,response);
}
@Override
public void destroy() {
}
}