我是 Spring Security 的新手,所以我制作了一个小型 Web 应用程序,以便尝试它并找到对我正在从事的项目有用的配置。
我强制通过 HTTPS 访问登录页面,登录后需要切换回 HTTP。换句话说:
- 登录页面:仅限 HTTPS
- 其他页面:仅限 HTTP
我尝试了多种方法,但无法像上面所说的那样使其工作。
我读了Spring安全常见问题解答 http://static.springsource.org/spring-security/site/faq.html#faq-tomcat-https-session我发现没有“自然”的方式来做我想做的事,但我被要求这样做,因此我需要一个我自己找不到的解决方法。
我正在使用 Spring Security 3.1.0。
我的网络容器是 Tomcat 6.0.33。
这是我的 Spring Security 配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:sec="http://www.springframework.org/schema/security"
xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<sec:http auto-config="true" use-expressions="true">
<sec:intercept-url pattern="/log*.htm" access="anonymous"
requires-channel="https" />
<sec:intercept-url pattern="/admin/**" access="hasRole('admin')"
requires-channel="http" />
<sec:intercept-url pattern="/**"
requires-channel="http" access="hasRole('authenticated')" />
<sec:form-login login-page="/login.htm"
default-target-url="/index.htm" authentication-failure-url="/login.htm?error=true"
always-use-default-target="true" />
<sec:logout logout-url="/logout.htm" delete-cookies="JSESSIONID" invalidate-session="true" />
<sec:anonymous/>
<sec:remember-me use-secure-cookie="true" />
</sec:http>
<sec:authentication-manager>
<sec:authentication-provider>
<sec:user-service>
<sec:user name="johnny" password="johnny" authorities="authenticated, admin" />
<sec:user name="charlie" password="charlie"
authorities="authenticated" />
</sec:user-service>
</sec:authentication-provider>
</sec:authentication-manager>
</beans>
任何帮助将不胜感激。
提前致谢!
我发现这个问题的解决方法是禁用 Spring Security 的默认会话固定保护。我必须将“会话管理”元素添加到我首先描述的 XML 配置中。
<sec:http auto-config="true">
<!-- ... -->
<sec:session-management session-fixation-protection="none"/>
<!-- ... -->
</sec:http>
除此之外,我们必须提供的“应用程序 URL”URL 不是登录 URL,而是主页 URL,例如不是http://myapp/login.htm http://myapp/login.htm BUT http://myapp/index.htm http://myapp/index.htm。这样做,如果用户已登录或拥有“记住我”cookie,他们将能够毫无问题地输入,并且浏览器将继续使用 HTTP 协议。如果没有,用户将被重定向到使用 HTTPS 的登录页面,成功登录后浏览器会正确切换回 HTTP。请考虑到这一点,因为如果您直接写入(或单击)登录 URL,HTTPS 将始终保持。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)