没有效果的原因是只用了第1个步骤,后面加了第2个步骤以后就可以了
要两个步骤:
1
package com.tsingning.safety.web.interceptor;
import com.alibaba.fastjson.JSON;
import com.tsingning.safety.common.bean.ResponseVo;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
- @author zhouy
- @ClassName: TokenInterceptor
- @Description: token拦截器
- @date 2019年4月15日 下午5:47:22
*/
@Component
public class TokenInterceptor implements HandlerInterceptor {
// @Autowired
// private CacheUtil cacheUtil;
// @Autowired
// private SysAdminMapper sysAdminMapper;
private static final Logger logger = LoggerFactory.getLogger(TokenInterceptor.class);
/**
* @param cacheUtil
*/
// public TokenInterceptor(CacheUtil cacheUtil) {
// this.cacheUtil = cacheUtil;
// }
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
try {
/* String url = request.getRequestURI();
HashMap<String, Object> hashMap = new HashMap<>();
Enumeration er = request.getHeaderNames();//获取请求头的所有name值 youq
while (er.hasMoreElements()) {
String name = (String) er.nextElement();
String value = request.getHeader(name);
hashMap.put(name, value);
}
logger.info("请求URL: {} header : {} ", url, hashMap);
*/
String token = request.getHeader("Token");
String userId = request.getHeader("User");
String loginType = request.getHeader("LoginType"); //1=App端 2=pc端
Integer user = null;
try {
user = Integer.parseInt(userId);
} catch (NumberFormatException e) {
user = null;
}
if (StringUtils.isEmpty(userId)) {
returnJson(response, JSON.toJSONString(ResponseVo.getTokenErrorResult("参数User不能为空")));
return false;
}
if (StringUtils.isEmpty(token)) {
returnJson(response,JSON.toJSONString(ResponseVo.getTokenErrorResult("参数Token不能为空")));
return false;
}
// 与缓存比对
/*
String result;
if(MethodUtil.isNotEmpty(loginType)&&loginType.equals("2")){
result = cacheUtil.isToken("PC",user, token);
}else{
result = cacheUtil.isToken("APP",user, token);
}
if(MethodUtil.isEmpty(result)){
returnJson(response,JSON.toJSONString(ResponseVo.getTokenErrorResult("密码错误!请重新登录")));
return false;
}else{
if(!result.equals(token)){
returnJson(response,JSON.toJSONString(ResponseVo.getTokenErrorResult("您的账号在其他客户端登录,请重新登录")));
return false;
}
}*/
return true;
} catch (Exception e) {
logger.info("拦截器异常{}", e.toString());
e.printStackTrace();
returnJson(response,JSON.toJSONString(ResponseVo.getTokenErrorResult("请求失败,请稍后在使用!!!")));
return false;
}
}
private void returnJson(HttpServletResponse response, String json) throws Exception {
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json");
try {
writer = response.getWriter();
writer.print(json);
} catch (IOException e) {
logger.error("response error", e);
} finally {
if (writer != null)
writer.close();
}
}
}
2:
package com.tsingning.safety.web.interceptor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
@Configuration
//@PropertySource(value = "classpath:app.properties", encoding = "utf-8", ignoreResourceNotFound = true)
//@ConfigurationProperties(prefix = "path.patterns", ignoreInvalidFields = true, ignoreUnknownFields = true)
public class WebConfig implements WebMvcConfigurer {
// @Autowired
// private ApiNotLoginUrl apiNotLoginUrl;
//
// @Autowired
// private CacheUtil cacheUtil;
// @Autowired
// private SysAdminMapper sysAdminMapper;
// 放开接口
private List<String> urls;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 添加拦截器,配置拦截地址
registry.addInterceptor(new TokenInterceptor()).addPathPatterns("/**");
// registry.addInterceptor(new TokenInterceptor(apiNotLoginUrl, cacheUtil,sysAdminMapper))
// .addPathPatterns("/").excludePathPatterns(urls);
//.addPathPatterns("/app//.do");
}
/*
* 跨越配置
/
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
// 设置允许跨域请求的域名
config.addAllowedOrigin("");
// 设置运行访问的头部
config.addAllowedHeader("");
// 设置允许的方法
config.addAllowedMethod("");
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", config);
return new CorsFilter(configSource);
}
public List<String> getUrls() {
return urls;
}
public void setUrls(List<String> urls) {
this.urls = urls;
}
}
网友评论