|
@@ -1,6 +1,18 @@
|
|
|
package com.platform.interceptor;
|
|
|
|
|
|
+import com.platform.annotation.IgnoreAuth;
|
|
|
+import com.platform.entity.TokenEntity;
|
|
|
+import com.platform.exception.CommonBaseException;
|
|
|
+import com.platform.service.TokenService;
|
|
|
+import com.platform.utils.ApiRRException;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.web.method.HandlerMethod;
|
|
|
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
/**
|
|
|
* 权限(Token)验证
|
|
@@ -11,8 +23,44 @@ import org.springframework.stereotype.Component;
|
|
|
* @date 2017-03-23 15:38
|
|
|
*/
|
|
|
@Component
|
|
|
-public class AuthorizationInterceptor{
|
|
|
+public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
|
|
|
public static final String LOGIN_USER_KEY = "LOGIN_USER_KEY";
|
|
|
public static final String LOGIN_TOKEN_KEY = "X-Nideshop-Token";
|
|
|
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
|
+
|
|
|
+ //支持跨域请求
|
|
|
+ response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
|
|
|
+ response.setHeader("Access-Control-Max-Age", "3600");
|
|
|
+ response.setHeader("Access-Control-Allow-Credentials", "true");
|
|
|
+ response.setHeader("Access-Control-Allow-Headers", "x-requested-with,X-Nideshop-Token,X-URL-PATH");
|
|
|
+ response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
|
|
|
+
|
|
|
+ IgnoreAuth annotation;
|
|
|
+ if (handler instanceof HandlerMethod) {
|
|
|
+ annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
|
|
|
+ } else {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果有@IgnoreAuth注解,则不验证token
|
|
|
+ if (annotation != null) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ //从header中获取token
|
|
|
+ String token = request.getHeader(LOGIN_TOKEN_KEY);
|
|
|
+ //如果header中不存在token,则从参数中获取token
|
|
|
+ if (StringUtils.isBlank(token)) {
|
|
|
+ token = request.getParameter(LOGIN_TOKEN_KEY);
|
|
|
+ }
|
|
|
+
|
|
|
+ //token为空
|
|
|
+ if (StringUtils.isBlank(token)) {
|
|
|
+ throw new CommonBaseException(401,"请先登录");
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|