Luk*_*lar 6 java spring spring-security
SavedRequest登录后,我使用重定向用户到最初请求的URL。
我得到这样的网址:
public String requestedUrl(HttpServletRequest request, HttpServletResponse response) {
SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response);
if (savedRequest != null) {
return savedRequest.getRedirectUrl();
}
return "";
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否值得检查该URL,例如
请问是否有SavedRequest与此类似的清理工作?如果是,那到底是什么?
这不是答案,而是基于对代码的调查,因为我很好奇。:3
首先我要说的是,了解如何在项目中配置 Spring Security 以真正找到问题的根源是很有用的。当您追溯SavedRequest它在 Spring Security 中的使用方式时,会发现很多可能的途径,涉及到一开始如何连接和配置所有内容。
正如前面所指出的,与其直接相邻的代码SavedRequest非常简单,通常与问题的根源无关。您的问题焦点可以扩大:“在应用 SavedRequests 时,Spring Security 是否会避免重定向循环到 /login?”
我认为文档10.1.4 请求匹配和 HttpFirewall确实解决了您有关基本路径的问题:
Servlet 规范为 HttpServletRequest 定义了几个属性,这些属性可通过 getter 方法访问,并且我们可能希望对其进行匹配。它们是 contextPath、servletPath、pathInfo 和 queryString。Spring Security 只对保护应用程序内的路径感兴趣,因此 contextPath 被忽略。
强调我的。
在默认配置中,似乎将根据使用中DefaultSavedRequest的实现。SavedRequestHttpSessionRequestCache
DefaultSavedRequest自从您最初提出问题以来,没有发生任何广泛的变化。
建立这一点后,我们可以说该类的实现相当简单,非常类似于 Bean,并且仅限于保存所呈现的请求。除了排除某些标头(“跳过 If-Modified-Since 和 If-None-Match 标头”)之外,它在构造期间不执行任何分析。
public DefaultSavedRequest(HttpServletRequest request, PortResolver portResolver) {
Assert.notNull(request, "Request required");
Assert.notNull(portResolver, "PortResolver required");
// Cookies
addCookies(request.getCookies());
// Headers
Enumeration<String> names = request.getHeaderNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
// Skip If-Modified-Since and If-None-Match header. SEC-1412, SEC-1624.
if (HEADER_IF_MODIFIED_SINCE.equalsIgnoreCase(name)
|| HEADER_IF_NONE_MATCH.equalsIgnoreCase(name)) {
continue;
}
Enumeration<String> values = request.getHeaders(name);
while (values.hasMoreElements()) {
this.addHeader(name, values.nextElement());
}
}
// Locales
addLocales(request.getLocales());
// Parameters
addParameters(request.getParameterMap());
// Primitives
this.method = request.getMethod();
this.pathInfo = request.getPathInfo();
this.queryString = request.getQueryString();
this.requestURI = request.getRequestURI();
this.serverPort = portResolver.getServerPort(request);
this.requestURL = request.getRequestURL().toString();
this.scheme = request.getScheme();
this.serverName = request.getServerName();
this.contextPath = request.getContextPath();
this.servletPath = request.getServletPath();
}
Run Code Online (Sandbox Code Playgroud)
addCookies、addHeader、addLocales和addParameters同样简单。此类不会解析请求以防止无限重定向,甚至不会检查其基本路径。
因此,我们将进一步撒网寻找另一名嫌疑人。接下来是HttpSessionRequestCache. 根据您对 Spring Security 的使用情况,可以通过多种方式创建 bean,因此事情从那里开始螺旋式发展HttpConfigurationBuilder// HttpSecurity;RequestCacheConfigurer确实欢迎专家+您提供更多信息!
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |