【发布时间】:2014-07-24 04:47:25
【问题描述】:
我在尝试让<security:intercept-url ... requires-channel="https"/> 在 WAS 上正常工作时遇到问题。应用程序服务器已启用 SSL。
当我有这样的配置时:-
<security:http auto-config="true">
<security:form-login .../>
<security:logout .../>
<security:intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
<security:intercept-url pattern="/**" access="ROLE_ADMIN,ROLE_USER" />
</security:http>
...我可以同时点击http://server/myapp 和https://server/myapp。在这两种情况下,Spring Security 都能够拦截此 URL 并向我显示登录页面。
现在,我要做的是将所有 http URL 重定向到 https URL。所以,我将requires-channel="https" 添加到<security:intercept-url />
<security:http auto-config="true">
<security:form-login .../>
<security:logout .../>
<security:intercept-url pattern="/admin/**" access="ROLE_ADMIN" requires-channel="https" />
<security:intercept-url pattern="/**" access="ROLE_ADMIN,ROLE_USER" requires-channel="https" />
</security:http>
...现在,当我尝试点击 http://server/myapp 时,我看到 http://server/myapp/myapp/myapp/myapp/myapp/myapp 并进入重定向循环。
所以,我重新定义了端口映射:-
<security:http auto-config="true">
<security:form-login .../>
<security:logout .../>
<security:intercept-url pattern="/admin/**" access="ROLE_ADMIN" requires-channel="https" />
<security:intercept-url pattern="/**" access="ROLE_ADMIN,ROLE_USER" requires-channel="https" />
<security:port-mappings>
<security:port-mapping http="80" https="443"/>
</security:port-mappings>
</security:http>
...当我尝试点击 http://server/myapp 时,浏览器栏中的 URL 没有改变,但我仍然遇到“重定向循环”问题。即使我尝试点击https://server/myapp,我仍然会遇到同样的问题。
关于如何调试此问题的想法已经不多了。似乎当我添加 requires-channel="https" 时,它在 WAS 上中断,但在 Jetty 上运行良好。我目前的解决方法是删除 requires-channel="https" 以便 https 在 WAS 上工作,但随后用户可能会使用 http 访问该站点。
只是为了抛出另一件事,为 http 添加端口 9080 和为 https 添加端口 9443 并不能解决 WAS 上的问题。
有什么想法吗?感谢您的帮助。
【问题讨论】:
-
免责声明:我可能是错的,这毕竟是互联网 :) 我似乎记得你需要
<mvc:default-servlet-handler />或调用DefaultServletHandlerConfigurer.enable()如果你正在使用注释配置以使其正常工作,因此您可能需要检查是否还没有添加它。 -
您找到解决方案了吗?我遇到了同样的问题
-
我也遇到了同样的问题...有什么解决办法吗?
-
您是否尝试查看循环发生在 Spring 框架的哪个位置?您也许可以引入一个打破循环的过滤器
标签: java spring ssl spring-security websphere