我正在使用tomcat 6,spring mvc 3.0.0和spring security 3.0.0,并且由于我存储在数据库中的密码是sha1哈希,我不能使用摘要式身份验证(section 9.2.1 of the documentation spells that out)。因此,我需要通过https进行身份验证。
由于潜在的处理开销,我希望尽可能多地保留常规http中的流量。有没有办法让spring使用https来获取未经身份验证的请求,然后在完成身份验证后使用http?我认为这是通过某种类型的ChannelProcessingFilter来完成的,但我对这些细节感到难过。
这是我目前的application-security.xml文件:
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="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.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<http use-expressions="true">
<intercept-url pattern="/**" access="isAuthenticated()" />
<http-basic />
</http>
<authentication-manager>
<authentication-provider user-service-ref="myUserDetailsService">
<password-encoder hash="sha"/>
</authentication-provider>
</authentication-manager>
<beans:bean id="myUserDetailsService"
class="path.to.myUserDetailsServiceImpl">
</beans:bean>
</beans:beans>
感谢您的帮助。
答案 0 :(得分:6)
如果您在任何时候通过HTTP传递会话ID,则表示您违反了OWASP A9。如果攻击者拥有会话ID,则不需要密码。我不会在您的应用程序中实现此功能,https非常轻量级,我认为您应该考虑在不会意味着您的客户端被黑客入侵的地方节省资源。
答案 1 :(得分:3)
不确定如何使用Spring MVC完成此操作,但我确实使用带有Spring Security 3的Grails实现了这一点...如果您有兴趣,可以查看我的博客文章here。
因为这对你没有帮助...我做了一个快速的谷歌搜索,找到了this帖子,看起来是正确的,并说要配置你的web.xml:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext-security.xml
</param-value>
</context-param>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
和你的applicationContext-security.xml一样:
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="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-2.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd">
<http>
<intercept-url pattern="/url1.htm"
access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="https" />
<intercept-url pattern="/url2.htm"
access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="https" />
<intercept-url pattern="/**"
access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="http" />
<anonymous />
<http-basic/>
</http>
<!-- This bean is optional; it isn't used by any other bean as it only listens and logs -->
<beans:bean id="loggerListener" class="org.springframework.security.event.authentication.LoggerListener"/>
</beans:beans>
另请查看此site以获取更多信息以及如何配置tomcats SSL连接器。