Skip to content

Commit d15e6b9

Browse files
committed
feat(security): PermissionAuthorizationManager 校验 http 方法
1 parent eccd457 commit d15e6b9

3 files changed

Lines changed: 55 additions & 16 deletions

File tree

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.admin4j.framework.security.authorization;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import lombok.NoArgsConstructor;
6+
import org.springframework.http.HttpMethod;
7+
8+
/**
9+
* http 请求权限数据
10+
*
11+
* @author andanyang
12+
* @since 2023/12/19 16:08
13+
*/
14+
@Data
15+
@NoArgsConstructor
16+
@AllArgsConstructor
17+
public class HttpUrlPermission {
18+
19+
/**
20+
* http 请求方法;
21+
* 为null 表示不限制请求方法
22+
*/
23+
private HttpMethod httpMethod;
24+
/**
25+
* http 请求地址
26+
* 如: /user/1
27+
*/
28+
private String requestURI;
29+
}

security-spring-boot-starter/src/main/java/com/admin4j/framework/security/authorization/IPermissionUriService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ public interface IPermissionUriService {
1515
*
1616
* @return
1717
*/
18-
List<String> allPermissionUri();
18+
List<HttpUrlPermission> allPermissionUrl();
1919

2020
/**
2121
* 当前用户拥有的权限
2222
*
2323
* @return
2424
*/
25-
List<String> getMyPermissionUrls();
25+
List<HttpUrlPermission> getMyPermissionUrls();
2626
}

security-spring-boot-starter/src/main/java/com/admin4j/framework/security/authorization/PermissionAuthorizationManager.java

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,14 @@ public AuthorizationDecision check(Supplier<Authentication> authentication, Requ
4545

4646
// 获取当前请求的 URL 地址
4747
String requestURI = object.getRequest().getRequestURI();
48-
boolean matchPermission = matchPermission(requestURI);
48+
String method = object.getRequest().getMethod();
49+
boolean matchPermission = matchPermission(requestURI, method);
4950
if (matchPermission) {
5051
return GRANTED;
5152
}
5253

5354
// 沒有匹配到, 查看当前 requestURI 是否需要权限控制
54-
return urlNeedPermission(requestURI) ? UN_AUTHORIZED : GRANTED;
55+
return urlNeedPermission(requestURI, method) ? UN_AUTHORIZED : GRANTED;
5556
}
5657

5758
/**
@@ -60,11 +61,15 @@ public AuthorizationDecision check(Supplier<Authentication> authentication, Requ
6061
*
6162
* @return
6263
*/
63-
public boolean urlNeedPermission(String requestURI) {
64-
65-
Collection<String> allPermissionUrls = getAllPermissionUrls();
66-
for (String url : allPermissionUrls) {
67-
if (antPathMatcher.match(url, requestURI)) {
64+
public boolean urlNeedPermission(String requestURI, String method) {
65+
66+
Collection<HttpUrlPermission> allPermissionUrls = getAllPermissionUrls();
67+
for (HttpUrlPermission urlPermission : allPermissionUrls) {
68+
// method 相同 && 请求路径可以匹配
69+
if (
70+
(urlPermission.getHttpMethod() == null || urlPermission.getHttpMethod().name().equalsIgnoreCase(method))
71+
&&
72+
antPathMatcher.match(urlPermission.getRequestURI(), requestURI)) {
6873
return true;
6974
}
7075
}
@@ -77,15 +82,20 @@ public boolean urlNeedPermission(String requestURI) {
7782
* @param requestURI
7883
* @return
7984
*/
80-
public boolean matchPermission(String requestURI) {
81-
Collection<String> permissionUrls = getPermissionUrls();
85+
public boolean matchPermission(String requestURI, String method) {
86+
Collection<HttpUrlPermission> permissionUrls = getPermissionUrls();
8287

8388
if (permissionUrls == null || permissionUrls.isEmpty()) {
8489
return false;
8590
}
8691

87-
for (String url : permissionUrls) {
88-
if (antPathMatcher.match(url, requestURI)) {
92+
for (HttpUrlPermission urlPermission : permissionUrls) {
93+
94+
// method 相同 && 请求路径可以匹配
95+
if (
96+
(urlPermission.getHttpMethod() == null || urlPermission.getHttpMethod().name().equalsIgnoreCase(method))
97+
&&
98+
antPathMatcher.match(urlPermission.getRequestURI(), requestURI)) {
8999
return true;
90100
}
91101
}
@@ -97,7 +107,7 @@ public boolean matchPermission(String requestURI) {
97107
*
98108
* @return
99109
*/
100-
public Collection<String> getPermissionUrls() {
110+
public Collection<HttpUrlPermission> getPermissionUrls() {
101111

102112
return permissionUriService.getMyPermissionUrls();
103113
}
@@ -108,7 +118,7 @@ public Collection<String> getPermissionUrls() {
108118
*
109119
* @return
110120
*/
111-
protected Collection<String> getAllPermissionUrls() {
112-
return permissionUriService.allPermissionUri();
121+
protected Collection<HttpUrlPermission> getAllPermissionUrls() {
122+
return permissionUriService.allPermissionUrl();
113123
}
114124
}

0 commit comments

Comments
 (0)