Skip to content

Commit cdac92c

Browse files
authored
Merge pull request #229 from didi/dev
通过获取类的RequestMapping注解来判断当前请求是否需要登录
2 parents 8f10624 + 2a57c26 commit cdac92c

File tree

4 files changed

+40
-13
lines changed

4 files changed

+40
-13
lines changed

kafka-manager-common/src/main/java/com/xiaojukeji/kafka/manager/common/constant/ApiPrefix.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ public class ApiPrefix {
1111

1212
// login
1313
public static final String API_V1_SSO_PREFIX = API_V1_PREFIX + "sso/";
14-
public static final String API_V1_SSO_LOGIN = API_V1_SSO_PREFIX + "login";
15-
public static final String API_V1_SSO_LOGOUT = API_V1_SSO_PREFIX + "logout";
1614

1715
// console
1816
public static final String API_V1_NORMAL_PREFIX = API_V1_PREFIX + "normal/";

kafka-manager-extends/kafka-manager-account/src/main/java/com/xiaojukeji/kafka/manager/account/LoginService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ public interface LoginService {
1616

1717
void logout(HttpServletRequest request, HttpServletResponse response, Boolean needJump2LoginPage);
1818

19-
boolean checkLogin(HttpServletRequest request, HttpServletResponse response);
19+
boolean checkLogin(HttpServletRequest request, HttpServletResponse response, String classRequestMappingValue);
2020
}

kafka-manager-extends/kafka-manager-account/src/main/java/com/xiaojukeji/kafka/manager/account/impl/LoginServiceImpl.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,19 +63,16 @@ public void logout(HttpServletRequest request, HttpServletResponse response, Boo
6363
}
6464

6565
@Override
66-
public boolean checkLogin(HttpServletRequest request, HttpServletResponse response) {
67-
String uri = request.getRequestURI();
68-
if (uri.contains("..") || uri.contains("./") || uri.contains("///")) {
69-
LOGGER.error("class=LoginServiceImpl||method=checkLogin||msg=uri illegal, contains .. or ./ or ///||uri={}", uri);
66+
public boolean checkLogin(HttpServletRequest request, HttpServletResponse response, String classRequestMappingValue) {
67+
if (ValidateUtils.isNull(classRequestMappingValue)) {
68+
LOGGER.error("class=LoginServiceImpl||method=checkLogin||msg=uri illegal||uri={}", request.getRequestURI());
7069
singleSignOn.setRedirectToLoginPage(response);
7170
return false;
7271
}
73-
uri = uri.replaceAll("//", "/");
7472

75-
if (uri.equals(ApiPrefix.API_V1_SSO_LOGIN)
76-
|| uri.equals(ApiPrefix.API_V1_SSO_LOGOUT)
77-
|| uri.startsWith(ApiPrefix.API_V1_THIRD_PART_PREFIX)
78-
|| uri.startsWith(ApiPrefix.GATEWAY_API_V1_PREFIX)) {
73+
if (classRequestMappingValue.equals(ApiPrefix.API_V1_SSO_PREFIX)
74+
|| classRequestMappingValue.equals(ApiPrefix.API_V1_THIRD_PART_PREFIX)
75+
|| classRequestMappingValue.equals(ApiPrefix.GATEWAY_API_V1_PREFIX)) {
7976
// 白名单接口直接true
8077
return true;
8178
}

kafka-manager-web/src/main/java/com/xiaojukeji/kafka/manager/web/inteceptor/PermissionInterceptor.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package com.xiaojukeji.kafka.manager.web.inteceptor;
22

33
import com.xiaojukeji.kafka.manager.account.LoginService;
4+
import com.xiaojukeji.kafka.manager.common.utils.ValidateUtils;
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
47
import org.springframework.beans.factory.annotation.Autowired;
58
import org.springframework.stereotype.Component;
9+
import org.springframework.web.bind.annotation.RequestMapping;
10+
import org.springframework.web.method.HandlerMethod;
611
import org.springframework.web.servlet.HandlerInterceptor;
712

813
import javax.servlet.http.HttpServletRequest;
@@ -15,6 +20,8 @@
1520
*/
1621
@Component
1722
public class PermissionInterceptor implements HandlerInterceptor {
23+
private static final Logger LOGGER = LoggerFactory.getLogger(PermissionInterceptor.class);
24+
1825
@Autowired
1926
private LoginService loginService;
2027

@@ -28,6 +35,31 @@ public class PermissionInterceptor implements HandlerInterceptor {
2835
public boolean preHandle(HttpServletRequest request,
2936
HttpServletResponse response,
3037
Object handler) throws Exception {
31-
return loginService.checkLogin(request, response);
38+
39+
String classRequestMappingValue = null;
40+
try {
41+
classRequestMappingValue = getClassRequestMappingValue(handler);
42+
} catch (Exception e) {
43+
LOGGER.error("class=PermissionInterceptor||method=preHandle||uri={}||msg=parse class request-mapping failed", request.getRequestURI(), e);
44+
}
45+
return loginService.checkLogin(request, response, classRequestMappingValue);
46+
}
47+
48+
private String getClassRequestMappingValue(Object handler) {
49+
RequestMapping classRM = null;
50+
if(handler instanceof HandlerMethod) {
51+
HandlerMethod hm = (HandlerMethod)handler;
52+
classRM = hm.getMethod().getDeclaringClass().getAnnotation(RequestMapping.class);
53+
} else if(handler instanceof org.springframework.web.servlet.mvc.Controller) {
54+
org.springframework.web.servlet.mvc.Controller hm = (org.springframework.web.servlet.mvc.Controller)handler;
55+
Class<? extends org.springframework.web.servlet.mvc.Controller> hmClass = hm.getClass();
56+
classRM = hmClass.getAnnotation(RequestMapping.class);
57+
} else {
58+
classRM = handler.getClass().getAnnotation(RequestMapping.class);
59+
}
60+
if (ValidateUtils.isNull(classRM) || classRM.value().length < 0) {
61+
return null;
62+
}
63+
return classRM.value()[0];
3264
}
3365
}

0 commit comments

Comments
 (0)