我有一个受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中加入了一些额外的信息,我认为这些信息最初并不相关。
答案 0 :(得分:2)
尝试使用以下内容更改配置中的拦截网址:
<intercept-url pattern="/dontSecure/**" access="permitAll" />
不在单独的<http>
代码中
答案 1 :(得分:1)
问题可能是由于您的自定义过滤器已应用于所有路径。你必须找到一种方法只为某些路径注册你的自定义过滤器(我可以告诉你如何在Spring Boot中执行此操作,但你可能没有使用它)。