场景
我有一个spring引导应用程序,它使用上下文而不是域根来访问:
问题
成功登录后,使用经典配置:
formLogin()
.loginPage("/login")
.defaultSuccessUrl("/my_form")
因此,我尝试使用相对url (注意/my_form之前的点) ./my_form而不是/my_form
formLogin()
.loginPage("/login")
.defaultSuccessUrl("./my_form")
spring抛给我这个错误:由于security中的验证,defaultTarget必须以'/‘或'http(s)开头:
//org.springframework.security.web.authentication.AbstractAuthenticationTargetUrlRequestHandler
public void setDefaultTargetUrl(String defaultTargetUrl) {
Assert.isTrue(UrlUtils.isValidRedirectUrl(defaultTargetUrl),
"defaultTarget must start with '/' or with 'http(s)'");
this.defaultTargetUrl = defaultTargetUrl;
}
因此,我可以说:经典的默认成功url方法不允许使用相对url,因为如果我使用根域,就像在本地主机中一样工作。
相对与绝对urls
更多信息here
我在java (一种其他语言,如php和nodejs )中的html和资产也遇到了类似的麻烦。
基本上,如果您正在为您的应用程序使用上下文而不是域根,则必须更改以下内容:
<link href="/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"/>
至
<link href="./vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"/>
注意/供应商/引导/.之前的点。
如果没有这个点,您的资产将无法下载,因为浏览器对urls的请求如下:
何时应:
当前的解决办法
formLogin()
.loginPage("/login")
.defaultSuccessUrl("http://app.com/organization_a/my_form")
问题
在春季安全中有使用相对重定向的方法吗?
我正在使用一个最新的春季引导版本:2.1.7.RELEASE
如有任何帮助或评论,我们将不胜感激。
谢谢
发布于 2021-03-31 06:12:53
我设法通过以下spring属性启用了相对重定向:
server:
tomcat:
use-relative-redirects: true
https://stackoverflow.com/questions/57503924
复制相似问题