允许特定URL模式绕过Spring Security Login

时间:2014-04-15 10:12:37

标签: spring spring-security

我有一个受Spring安全保护的Web应用程序。但是,有一个特定的URL模式,我不想应用任何安全性。我尝试过几种不同的方法,但似乎没有一种方法可行。每当我尝试转到该特定网址时,我都会转到spring_security_login页面。

web.xml的一部分:

<!-- NOT SECURE -->
<servlet>
    <servlet-name>dontSecureServlet</servlet-name>
    <servlet-class>org.com.gov.lol.DontSecure</servlet-class> 
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dontSecureServlet</servlet-name>
    <url-pattern>/dontSecure</url-pattern>
</servlet-mapping>

<!-- SECURE -->
<servlet>
    <servlet-name>secureServlet</servlet-name>
    <servlet-class>org.com.gov.lol.Secure</servlet-class> 
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>secureServlet</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>

<!-- SECURITY FILTER -->
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>

security-context.xml的一部分:

<!-- This did not work -->
<http pattern="/dontSecure" security="none" />

<http entry-point-ref="entryPoint" use-expressions="true">
    <custom-filter ref="customFilter" position="PRE_AUTH_FILTER" />

    <!-- I've also tried adding the following here (with no luck) -->
    <intercept-url pattern="/dontSecure" filters="none" />
    <intercept-url pattern="/secureMe" requires-channel="https" />
    <intercept-url pattern="/secureUs" requires-channel="https" />

</http>

<!-- I have even tried adding a separate <http> block just for /dontSecure -->
<http>
    <intercept-url pattern="/dontSecure" security="none" />
</http>

同样,通过上述配置的任意组合,网址/dontSecure仍会转发到春季登录页面。

关于可能导致这种情况的任何想法?

干杯。

更新

从服务器日志中,似乎/dontSecure网址正在加载dontSecureServlet。但是,似乎生成了一个错误,我正在使用404错误页面(配置为/404.htm,这必须是让我回到登录页面的内容)。

我已经从web.xml中加入了一些额外的信息,我认为这些信息最初并不相关。

2 个答案:

答案 0 :(得分:2)

尝试使用以下内容更改配置中的拦截网址:

<intercept-url pattern="/dontSecure/**" access="permitAll" />

不在单独的<http>代码中

答案 1 :(得分:1)

问题可能是由于您的自定义过滤器已应用于所有路径。你必须找到一种方法只为某些路径注册你的自定义过滤器(我可以告诉你如何在Spring Boot中执行此操作,但你可能没有使用它)。