@@ -59,13 +59,13 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
59
59
if (null == user ) {
60
60
Integer uid = TaleUtils .getCookieUid (request );
61
61
if (null != uid ) {
62
- // 这里还是有安全隐患, cookie 是可以伪造的
62
+ // Cookie 可以伪造,因此要注意
63
63
user = userService .getUserInfoById (uid );
64
64
request .getSession ().setAttribute (WebConst .LOGIN_SESSION_KEY , user );
65
65
}
66
66
}
67
67
68
- // 如果是以 /admin 开头并且不是特定的静态资源文件,则要求认证
68
+ // 需要认证的路径,不包括静态资源和登录页面
69
69
if (uri .startsWith ("/admin" )
70
70
&& !uri .startsWith ("/admin/login" )
71
71
&& null == user
@@ -75,13 +75,13 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
75
75
return false ;
76
76
}
77
77
78
- // 设置 CSRF token 并要求对敏感操作进行校验
78
+ // 设置 CSRF token,仅对敏感操作进行 CSRF 校验
79
79
if ("GET" .equalsIgnoreCase (request .getMethod ())) {
80
80
String csrfToken = UUID .UU64 ();
81
81
// 默认存储30分钟
82
82
cache .hset (Types .CSRF_TOKEN .getType (), csrfToken , uri , 30 * 60 );
83
83
request .setAttribute ("_csrf_token" , csrfToken );
84
- } else if ("POST" .equalsIgnoreCase (request .getMethod ())) {
84
+ } else if ("POST" .equalsIgnoreCase (request .getMethod ()) && isSensitiveOperation ( uri ) ) {
85
85
// 检查 POST 请求的 CSRF token
86
86
String csrfToken = request .getParameter ("_csrf_token" );
87
87
String expectedUri = cache .hget (Types .CSRF_TOKEN .getType (), csrfToken );
@@ -96,14 +96,22 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
96
96
}
97
97
98
98
/**
99
- * 检查是否为静态资源文件,避免对静态资源文件进行认证
99
+ * 检查是否为静态资源文件
100
100
*/
101
101
private boolean isStaticResource (String uri ) {
102
102
return uri .startsWith ("/admin/css" ) || uri .startsWith ("/admin/images" )
103
103
|| uri .startsWith ("/admin/js" ) || uri .startsWith ("/admin/plugins" )
104
104
|| uri .startsWith ("/admin/editormd" );
105
105
}
106
106
107
+ /**
108
+ * 检查是否为敏感操作路径(例如:删除、更新等操作)
109
+ */
110
+ private boolean isSensitiveOperation (String uri ) {
111
+ return uri .contains ("/delete" ) || uri .contains ("/update" ) || uri .contains ("/create" );
112
+ }
113
+
114
+
107
115
108
116
@ Override
109
117
public void postHandle (HttpServletRequest httpServletRequest , HttpServletResponse httpServletResponse , Object o , ModelAndView modelAndView ) throws Exception {
0 commit comments