Browse Source

权限不足错误提示写到前端

chenw 6 years ago
parent
commit
af3201bde1

+ 34 - 5
bi-auth/src/main/java/com/usoftchina/bi/auth/interceptor/SecurityInterceptor.java

@@ -2,18 +2,24 @@ package com.usoftchina.bi.auth.interceptor;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.usoftchina.bi.auth.annotation.Auth;
+import com.usoftchina.bi.core.base.RepCode;
+import com.usoftchina.bi.core.base.RepEntity;
 import com.usoftchina.bi.core.utils.GetTokenDataUtil;
+import com.usoftchina.bi.core.utils.JsonUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
 import org.springframework.stereotype.Component;
 import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.HandlerInterceptor;
 import org.springframework.web.servlet.ModelAndView;
 
-import javax.management.OperationsException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
 import java.util.Map;
 
 @Component
@@ -38,13 +44,12 @@ public class SecurityInterceptor implements HandlerInterceptor {
         }
         // 从参数中取出用户身份并验证
         String admin = auth.user();
-        logger.info("auth={}", admin);
         String token = request.getHeader("token");
         Map<String, String> resultMap = GetTokenDataUtil.getTokenData(token);
-        logger.info("user={}", resultMap.get("role"));
+        logger.info("authRole={},userRole={}", admin, resultMap.get("role"));
         if (!admin.equals(resultMap.get("role"))) {
-            logger.error("permission denied");
-            throw new OperationsException("权限不足");
+            returnErrorMessage(request, response, RepCode.NoAuthority);
+            return false;
         }
         return true;
     }
@@ -58,4 +63,28 @@ public class SecurityInterceptor implements HandlerInterceptor {
     public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
 
     }
+
+    /**
+     * 错误信息处理
+     * @param request
+     * @param response
+     * @param repCode
+     * @throws IOException
+     */
+    private void returnErrorMessage(HttpServletRequest request, HttpServletResponse response, RepCode repCode) throws IOException {
+        //跨域处理
+        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "*");
+        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET");
+        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "POST");
+        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "OPTIONS");
+        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
+        response.setHeader(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "3600");
+
+        response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
+        response.setCharacterEncoding("UTF-8");
+        PrintWriter writer = response.getWriter();
+        writer.print(JsonUtils.toJsonString(new RepEntity(repCode)));
+        writer.flush();
+        writer.close();
+    }
 }