Spring Security:使用特殊的URL参数忽略登录页面

我目前有一个看起来像这样的设置:

spring-security.xml:

<http auto-config="true">

<intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>

<intercept-url pattern="/**" access="ROLE_USER" />

<form-login login-page="/login"

default-target-url="/main.html"

authentication-failure-url="/failedLogin"/>

<logout logout-url="/logout.html" logout-success-url="/login" />

</http>

<authentication-manager>

<authentication-provider>

<user-service>

<user name="foo" password="bar" authorities="ROLE_USER" />

</user-service>

</authentication-provider>

</authentication-manager>

web.xml:

<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>

这一切似乎都按预期工作,但是在特殊情况下,如果用户传递特殊令牌,我希望绕过登录页面。因此,当前,如果用户转到诸如的url /dog,他们将看到登录页面,如果传递了的凭据,foo/bar则他们将登录并看到与相对应的页面/dog。

我希望能够使用这样的URL,例如URL /dog?token=abcd,它将绕过登录屏幕并将其直接带到与对应的页面/dog。如果他们提供了无效的令牌,那么他们只会看到拒绝访问页面。

回答:

Spring Security中,您要涵盖的场景在参考手册的“预身份验证场景”一章中进行了描述。

基本上,您必须:

通过扩展AbstractPreAuthenticatedProcessingFilter或选择其实现之一来创建自定义过滤器,

注册自定义过滤器<custom-filter position="PRE_AUTH_FILTER" ref="yourPreAuthFilter" />

实施或选择已实施之一AuthenticationUserDetailsService

在中注册服务PreAuthenticatedAuthenticationProvider(使用<property name="yourPreAuthenticatedUserDetailsService">)

编辑:在此答案中OP显示了他的实现方式PRE_AUTH_FILTER

以上是 Spring Security:使用特殊的URL参数忽略登录页面 的全部内容, 来源链接: utcz.com/qa/418694.html

回到顶部