允许特定URL模式绕过Spring安全登录

允许特定URL模式绕过Spring安全登录,spring,spring-security,Spring,Spring Security,我有一个受spring security保护的web应用程序。然而,有一个特定的URL模式我不想对其应用任何安全性。我试过几种不同的方法,但似乎都不管用。每当我尝试转到该特定URL时,我都会被转发到spring\u security\u login页面 web.xml的一部分: <!-- NOT SECURE --> <servlet> <servlet-name>dontSecureServlet</servlet-name> &

我有一个受spring security保护的web应用程序。然而,有一个特定的URL模式我不想对其应用任何安全性。我试过几种不同的方法,但似乎都不管用。每当我尝试转到该特定URL时,我都会被转发到
spring\u security\u 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>

dontSecureServlet
org.com.gov.lol.DontSecure
1.
dontSecureServlet
/dontSecure
secureServlet
org.com.gov.lol.Secure
1.
secureServlet
*.htm
springSecurityFilterChain
/*
要求
错误
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>

同样,通过上述配置的任意组合,url
/dontSecure
仍然会转发到spring登录页面

你知道是什么导致了这一切吗

干杯

更新

从服务器日志来看,
/dontSecure
url似乎正在加载
dontSecureServlet
。但是,似乎生成了一个错误,我被禁止进入404错误页面(配置为/404.htm,这必须是使我返回登录页面的原因)


我已经从web.xml中添加了一些我起初认为不相关的额外剪贴画。

尝试使用此剪贴画更改配置中的拦截url:

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


不在单独的
标记中

问题可能是由于您的自定义筛选器应用于所有路径。您必须找到一种只为特定路径注册自定义过滤器的方法(我可以在SpringBoot中向您展示如何做到这一点,但您可能没有使用它)

谢谢你的回答。我删除了另一个配置并将您的建议添加到更大的
块中,但我仍然被转发到登录页面我根据您的建议更新了配置,并且仍然被转发到登录页面,不幸的是,我没有使用spring boot。不过,这是一个有趣的建议,我会研究一下it@Mac如果您刚刚开始项目,那么切换到boot应该不会太困难。很抱歉,这已经是我团队中的一个现有项目。我只是想增加一些额外的功能。