|
@@ -2,13 +2,17 @@ package com.nokia.config.web;
|
|
|
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
|
import com.nokia.common.R;
|
|
|
+import com.nokia.service.AclService;
|
|
|
+import com.nokia.vo.TokenVo;
|
|
|
import lombok.NoArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.web.servlet.HandlerInterceptor;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import javax.servlet.http.HttpSession;
|
|
|
+import java.io.IOException;
|
|
|
|
|
|
/**
|
|
|
* web登录拦截
|
|
@@ -17,21 +21,31 @@ import javax.servlet.http.HttpSession;
|
|
|
@NoArgsConstructor
|
|
|
public class WebLoginInterceptor implements HandlerInterceptor {
|
|
|
private Integer timeoutSeconds;
|
|
|
+ private AclService aclService;
|
|
|
|
|
|
- public WebLoginInterceptor(Integer timeoutSeconds) {
|
|
|
+ public WebLoginInterceptor(Integer timeoutSeconds, AclService aclService) {
|
|
|
this.timeoutSeconds = timeoutSeconds;
|
|
|
+ this.aclService = aclService;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
|
HttpSession session = request.getSession();
|
|
|
// 未登录或登录失效返回401
|
|
|
- if (session == null || session.getAttribute("userinfo") == null) {
|
|
|
- response.setCharacterEncoding("UTF-8");
|
|
|
- response.setContentType("application/json; charset=utf-8");
|
|
|
- byte[] bytes = JSON.toJSONString(R.error().code(401).message("登录失效")).getBytes();
|
|
|
- response.getOutputStream().write(bytes);
|
|
|
- return false;
|
|
|
+ String token = request.getHeader("X-Authorization-Token");
|
|
|
+ String system = request.getHeader("X-Authorization-system");
|
|
|
+ String fromSystem = request.getHeader("X-Authorization-fromSystem");
|
|
|
+ if (StringUtils.isAnyBlank(token, system, fromSystem)) {
|
|
|
+ return unauthorized(response);
|
|
|
+ }
|
|
|
+ // session中用户信息为空根据header查询鉴权信息
|
|
|
+ if (session.getAttribute("userinfo") == null) {
|
|
|
+ TokenVo tokenVo = new TokenVo(token, system, fromSystem);
|
|
|
+ // 获取鉴权信息不记录日志
|
|
|
+ R r = aclService.verifySystem(tokenVo, session, false);
|
|
|
+ if (Boolean.FALSE.equals(r.getSuccess())) {
|
|
|
+ return unauthorized(response);
|
|
|
+ }
|
|
|
}
|
|
|
// 没有权限返回403
|
|
|
if (session.getAttribute("role") == null) {
|
|
@@ -48,4 +62,12 @@ public class WebLoginInterceptor implements HandlerInterceptor {
|
|
|
session.setMaxInactiveInterval(timeoutSeconds);
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+ private boolean unauthorized(HttpServletResponse response) throws IOException {
|
|
|
+ response.setCharacterEncoding("UTF-8");
|
|
|
+ response.setContentType("application/json; charset=utf-8");
|
|
|
+ byte[] bytes = JSON.toJSONString(R.error().code(401).message("登录失效")).getBytes();
|
|
|
+ response.getOutputStream().write(bytes);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|