Spring security 使用<;过滤链>;标签
我正在GWT应用程序中使用SpringSecurity3.2.5。我需要对安全性进行细粒度控制,因此我使用以下配置而不是元素:Spring security 使用<;过滤链>;标签,spring-security,Spring Security,我正在GWT应用程序中使用SpringSecurity3.2.5。我需要对安全性进行细粒度控制,因此我使用以下配置而不是元素: <beans:bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy"> <beans:constructor-arg> <beans:list>
<beans:bean id="springSecurityFilterChain"
class="org.springframework.security.web.FilterChainProxy">
<beans:constructor-arg>
<beans:list>
<filter-chain pattern="/css/**" filters="none" />
<filter-chain pattern="/image/**" filters="none" />
<filter-chain pattern="/index.jsp" filters="none" />
<filter-chain pattern="/**/logout" filters="logoutFilter" />
<filter-chain pattern="/**"
filters="securityContextPersistenceFilterWithASCTrue, concurrentSessionFilter, usernamePasswordAuthenticationFilter, exceptionTranslationFilter, filterSecurityInterceptor" />
</beans:list>
</beans:constructor-arg>
</beans:bean>
我省略了特定的过滤器实现
我需要强制上面的大多数过滤器链在使用标记时使用https,如以下示例所示:
<security:intercept-url pattern="/reports" access="ROLE_ADMIN" requires-channel="https"/>
我怎样才能做到这一点
编辑1:添加ChannelProcessingFilter
在@luke answer之后,我修改了代码,使通道过滤器位于过滤器链的第一个位置:
<filter-chain pattern="/**"
filters="channelProcessingFilter, securityContextPersistenceFilterWithASCTrue, ..." />
我还添加了以下bean配置:
<!-- Ensure https channel -->
<beans:bean id="filterSecurityInterceptor"
class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
<beans:property name="authenticationManager" ref="authenticationManager" />
<beans:property name="accessDecisionManager" ref="accessDecisionManager" />
<beans:property name="securityMetadataSource">
<filter-security-metadata-source>
<intercept-url pattern="/**" access="ROLE_USER" />
</filter-security-metadata-source>
</beans:property>
</beans:bean>
<beans:bean id="channelProcessingFilter" class="org.springframework.security.web.access.channel.ChannelProcessingFilter">
<beans:property name="channelDecisionManager" ref="channelDecisionManager"/>
<beans:property name="securityMetadataSource">
<filter-security-metadata-source request-matcher="ant">
<intercept-url pattern="/**" access="REQUIRES_SECURE_CHANNEL"/>
</filter-security-metadata-source>
</beans:property>
</beans:bean>
<beans:bean id="channelDecisionManager" class="org.springframework.security.web.access.channel.ChannelDecisionManagerImpl">
<beans:property name="channelProcessors">
<beans:list>
<beans:ref bean="secureChannelProcessor"/>
<beans:ref bean="insecureChannelProcessor"/>
</beans:list>
</beans:property>
</beans:bean>
<beans:bean id="secureChannelProcessor" class="org.springframework.security.web.access.channel.SecureChannelProcessor" />
<beans:bean id="insecureChannelProcessor" class="org.springframework.security.web.access.channel.InsecureChannelProcessor" />
现在的问题是,在通过http提交登录表单之后,我得到了一个无限循环。当然这是我想要避免的情况,但是无限循环是不对的。这是相关日志:
调试o.s.s.w.过滤器ChainProxy 337-/j\u弹簧\u安全检查
附加过滤器链中的位置1/6;点火过滤器:
“ChannelProcessingFilter”
调试o.s.s.w.a.c.通道处理过滤器134
-请求:过滤器职业:URL:/j\u spring\u security\u check;ConfigAttributes:[需要安全通道]2014-10-30 19:47:10565
调试o.s.s.w.a.c.RetryWithHttpsEntryPoint 55-重定向到:
/弹簧安全检查2014-10-30 19:47:10567调试
o、 s.s.w.DefaultRedirectStrategy 36-重定向到
“/j_spring_security_check”
有什么好主意吗?你需要一个好主意
最好只需要HTTPS即可访问所有站点。只有从一开始就使用HTTPS,它才是真正安全的。理想情况下,您也希望使用它与客户沟通。Hi@luke。我在HttpSentryPoint 55中得到一个无限循环-重定向到:/j\u spring\u security\u check。请看我上面的编辑,你的HTTPS设置正确吗?i、 e.你能通过HTTPS访问应用程序并在没有额外过滤器的情况下登录吗?是的,我删除了channelProcessingFilter,我可以使用HTTPS登录。我还测试了将channelProcessingFilter放回原处,可以通过普通http进行访问。这一切正常吗?顺便说一句,服务器是用GWT Eclipse插件安装的Jetty