package com.club.common.interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.util.ResourceUtils;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.nio.charset.Charset;
import java.util.List;
@Configuration
public class InterceptiorConfiguration extends WebMvcConfigurationSupport {
@Bean
public HttpMessageConverter<String> responseBodyConverter() {
return new StringHttpMessageConverter(Charset.forName("UTF-8"));
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(responseBodyConverter());
addDefaultHttpMessageConverters(converters);
}
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false);
}
@Autowired
private CommonInterceptor commonInterceptor;
@Autowired
private LoginInterceptor loginInterceptor;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(commonInterceptor)
.addPathPatterns("/**");
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/activity/collect")
.addPathPatterns("/activity/join")
.addPathPatterns("/news/collect")
.addPathPatterns("/trend/**")
.addPathPatterns("/trend")
.addPathPatterns("/**")
.excludePathPatterns("/home","/home/carousel","/home/hot/search/word"
,"/area/spell/city/list","/area/hot/city/list"
,"/wechat/applets/openid","/wechat/applets/decrypt"
,"/trend/page/list","/trend/nearby/list","/trend/hotuser/list"
,"/news/detail","/login/getVerificationCode/**"
,"/activity/detail"
/*"/login","/login/**","/register","/register/**"
/*,"/trend/detail","/news","/news/detail"
,"/activity/listPast","/activity/listConduct","/activity/detail","/activity/detail/v2"
,"/service","/service/detail"
,"/system/**","/config/**","/rest/**","/static/**","/error"
,"/pay/notify/**","/trend/comment/detail","/news/read","/trend/trend/detail"//以下新增加 活动修改
,"/classify","/commodity/detail","/commodity/exchange/detail","/commodity/exchange/success"
,"/commodityOrder/list","/integral/list","/coils","/car/list","/merchant/list","/merchant/detail"
,"/merchant/property","/merchant/services","/commodity","/merchant/businessCenter"
,"/commodityOrder/join","/toPay/integral","/car/config","/model/getModels"
,"/model/join","/integral/getUserList","/getClassifyList","/model/detail","/model/getProgramme"
,"/coils/detail","/coils/joinCoils","/car/getTypeList","/model/getApplyList","/activity/register/lucky/list"
,"/ttad/**","/system/sms/captcha","/cars","/cars/detail","/userFollow/**","/trend/page/list","/user/partner/price"
,"/user/partner/inventory","/pay/wechat/info","/wechat/applets/openid","/wechat/applets/decrypt","/user/download","/popup","/sms/notify/report"*/
)
;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations(
ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
super.addResourceHandlers(registry);
}
}
package com.club.common.interceptor;
import com.club.common.model.User;
import com.club.common.service.CommonUserService;
import com.club.common.util.JedisUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.mvc.WebContentInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class CommonInterceptor extends WebContentInterceptor {
private static final Logger logger = LoggerFactory.getLogger(CommonInterceptor.class);
@Autowired
CommonUserService userService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
response.setHeader("Access-Control-Allow-Origin","*");
response.setHeader("Content-Type","application/json;charset=UTF-8");
response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
response.setHeader("Access-Control-Allow-Headers","Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With,token");
if(request.getAttribute("user")!=null){
return true;
}
try{
String token = request.getHeader("token");
if(!StringUtils.isEmpty(token)){
Integer userId = null;
if(JedisUtils.exists(token)){
userId = Integer.valueOf(JedisUtils.get(token));
}
if(userId==null){
return true;
}
User user = userService.getById(userId);
if(user!=null){
request.setAttribute("user",user);
request.setAttribute("token",token);
}
}
}catch (Exception e){
logger.error("",e);
}
return true;
}
}
登陆拦截
package com.club.common.interceptor;
import com.club.common.constant.ClubConstant;
import com.club.common.model.HttpResult;
import com.club.common.model.User;
import com.club.common.service.CommonUserService;
import com.club.common.util.HttpUtils;
import com.club.common.util.JedisUtils;
import com.club.common.util.SignUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.mvc.WebContentInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
@Component
public class LoginInterceptor extends WebContentInterceptor {
private static final Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
// @Autowired
// private ClubCache cache;
@Autowired
CommonUserService userService;
// @Autowireds
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
StringBuilder builder = new StringBuilder();
try {
if(request.getServletPath().equals("/trend")&&request.getMethod().toUpperCase().equals("GET")){
return true;
}
String token = request.getHeader("token");
logger.info("请求方法:{}",request.getRequestURI());
Set<String> requestKeySet = request.getParameterMap().keySet();
builder.append("请求参数: token = ");
builder.append(token);
builder.append(" ");
for (String key:requestKeySet) {
builder.append(key +" = ");
builder.append(request.getParameter(key)+" ");
}
logger.info(builder.toString());
if(StringUtils.isEmpty(token)){
//进行验证签名
Map params = HttpUtils.getParameterMap(request);
if(params.containsKey("sign")){
SortedMap<String, String> allParams = HttpUtils.getAllParams(request, params);
boolean isSigned = SignUtils.getSignUtil.verifySign(allParams);
if(isSigned){
return true;
}else {
new ObjectMapper().writeValue(response.getWriter(),HttpResult.newSignFail());
return false;
}
}
new ObjectMapper().writeValue(response.getWriter(),HttpResult.newNoLogin());
return false;
}
// Integer userId = cache.getUserByToken(token);
Integer userId = null;
if(JedisUtils.exists(token)){
userId = Integer.valueOf(JedisUtils.get(token));
}
logger.info("userId = {}",userId);
if(userId==null){
new ObjectMapper().writeValue(response.getWriter(),HttpResult.newNoLogin());
return false;
}
User user = userService.getById(userId);
if(user.getStatus()!=Integer.parseInt(ClubConstant.STR_ONE)){
JedisUtils.del(token);
return false;
}
if(user==null){
new ObjectMapper().writeValue(response.getWriter(),HttpResult.newNoLogin());
return false;
}
request.setAttribute("user",user);
request.setAttribute("token",token);
} catch (Exception e) {
e.printStackTrace();
}
// finally {
// logService.insert(request.getRequestURI(),builder.toString()); //请求日志保存
// }
return true;
}
}