5 changed files with 149 additions and 18 deletions
@ -0,0 +1,79 @@ |
|||||
|
package com.ccsens.signin.config; |
||||
|
|
||||
|
import com.ccsens.signin.bean.po.SysUser; |
||||
|
import com.ccsens.signin.service.IUserService; |
||||
|
import com.ccsens.util.*; |
||||
|
import io.jsonwebtoken.Claims; |
||||
|
import io.jsonwebtoken.ExpiredJwtException; |
||||
|
import io.jsonwebtoken.SignatureException; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.web.servlet.HandlerInterceptor; |
||||
|
import org.springframework.web.servlet.ModelAndView; |
||||
|
|
||||
|
import javax.servlet.http.HttpServletRequest; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
|
||||
|
public class TokenInterceptor implements HandlerInterceptor { |
||||
|
@Autowired |
||||
|
private IUserService userService; |
||||
|
|
||||
|
@Override |
||||
|
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { |
||||
|
// 验证token是否存在
|
||||
|
final String authHeader = httpServletRequest.getHeader(WebConstant.HEADER_KEY_TOKEN); |
||||
|
if (authHeader == null || !authHeader.startsWith(WebConstant.HEADER_KEY_TOKEN_PREFIX)) { |
||||
|
HttpServletUtil.responseJson(httpServletResponse, |
||||
|
JacksonUtil.beanToJson(JsonResponse.newInstance().tokenNotFound())); |
||||
|
return false; |
||||
|
} |
||||
|
final String token = authHeader.substring(WebConstant.HEADER_KEY_TOKEN_PREFIX.length()); |
||||
|
|
||||
|
//验证token是否有效
|
||||
|
Claims claims = null; |
||||
|
try { |
||||
|
claims = JwtUtil.parseJWT(token, WebConstant.JWT_ACCESS_TOKEN_SECERT); |
||||
|
}catch(SignatureException e){ |
||||
|
HttpServletUtil.responseJson(httpServletResponse, |
||||
|
JacksonUtil.beanToJson(JsonResponse.newInstance().tokenSignatureFail(e.getMessage()))); |
||||
|
return false; |
||||
|
}catch(ExpiredJwtException e){ |
||||
|
HttpServletUtil.responseJson(httpServletResponse, |
||||
|
JacksonUtil.beanToJson(JsonResponse.newInstance().tokenExpire(e.getMessage()))); |
||||
|
return false; |
||||
|
}catch(Exception e){ |
||||
|
HttpServletUtil.responseJson(httpServletResponse, |
||||
|
JacksonUtil.beanToJson(JsonResponse.newInstance().tokenFailed(e.getMessage()))); |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
//验证用户存根
|
||||
|
if(userService.tokenNotExistInCache(Long.valueOf(claims.getSubject()))){ |
||||
|
HttpServletUtil.responseJson(httpServletResponse, |
||||
|
JacksonUtil.beanToJson(JsonResponse.newInstance().tokenStubNotFound())); |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//验证用户是否禁用
|
||||
|
SysUser user = userService.getUserById(Long.valueOf(claims.getSubject())); |
||||
|
if(user.getRecStatus() == WebConstant.REC_STATUS.Disabled.value){ |
||||
|
HttpServletUtil.responseJson(httpServletResponse, |
||||
|
JacksonUtil.beanToJson(JsonResponse.newInstance().userDisabled())); |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
//在request中存放claims
|
||||
|
httpServletRequest.setAttribute(WebConstant.REQUEST_KEY_CLAIMS,claims); |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { |
||||
|
|
||||
|
} |
||||
|
} |
Loading…
Reference in new issue