我使用spring 3.2.8.RELEASE和tomcat 7.0.55实现了一个Web应用程序。
我需要使用https来处理某些请求,例如' / login'但不适用于所有请求。
应用程序完全在http和https上运行,但我想过滤一些自动在https上运行的请求。
如何配置spring来执行此操作?
答案 0 :(得分:1)
您可以通过在每个拦截网址上添加requires-channel- attribute来配置https是必需的。
例如:
<security:intercept-url pattern="/your_url" access="your_role" requires-channel="https"/>
修改强>
web.xml中必需的spring安全性映射:
<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>
我希望这会奏效。
答案 1 :(得分:1)
如果您的应用程序同时支持HTTP和HTTPS,并且您要求只能通过HTTPS访问特定URL,则可以使用require-channel属性直接支持:
<http>
<intercept-url pattern="/secure/**" access="ROLE_USER" requires-channel="https"/>
<intercept-url pattern="/**" access="ROLE_USER" requires-channel="any"/>
...
</http>
答案 2 :(得分:0)
Spring使用控制器servlet进行所有内部URL映射。要避免使用此控制器,请更改Web.xml文件中的URL映射。
在这里查看类似的答案:Spring MVC URL pattern mappping in web.xml?
或者在这里查看有关配置'前端控制器'的弹簧文档:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html。这也将为您提供有关其如何工作和组合的良好概述。
祝你好运,如果你需要更多帮助,请告诉我!!
顺便说一句:我以为我会把它扔进去。在这里,您可以看到映射转到/example/...
。你也可以在spring配置文件中设置这种东西,但它们都遵循相同的原则。
<web-app>
<servlet>
<servlet-name>example</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>/example/*</url-pattern>
</servlet-mapping>
</web-app>