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