我有一个简单的 Spring Security (3.x) 配置,要求对应用程序中的部分资源进行 HTTP BASIC 身份验证。
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/secured/**" access="hasRole('ROLE_ADMIN')" requires-channel="https" />
<http-basic />
</http>
应用程序部署在上下文根ctx
。我将模式 /secured/*
映射到 Spring Security 过滤器链上。
对资源的请求https://server:httpsport/ctx/secured/blah
工作正常。对 https://server:httpsport/ctx/secured
的请求也是如此。但是,当我切换到不安全时,例如。 http://host:port/ctx/secured
看来重定向返回错误,复制了上下文根。在我的日志中,我可以看到向 /ctx/ctx/secured/...
发出了请求。
有人可以建议问题是什么或我应该看哪里吗?
最佳答案
我遇到了同样的问题并在这里找到了答案:http://myshittycode.com/2014/06/12/spring-security-forcing-urls-to-use-https/
所以就我而言,问题在于使用非默认 HTTP 和 HTTPS 端口。 在这种情况下,添加端口映射会有所帮助。
<port-mappings>
<port-mapping http="{yourHttpPort}" https="{yourHttpsPort}" />
</port-mappings>
关于java - 为什么 Spring Security HTTP BASIC 重定向到错误的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16734531/