当前位置: 首页 > 面试题库 >

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

夏弘义
2023-03-14
问题内容

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

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




 类似资料:
  • 我使用java通过Tesseract OCR从图像中提取了文本。但输出由一些特殊字符组成,因为图像包含一些符号。 我想忽略所有特殊字符,只显示文本。我有办法做到吗?

  • 使用Umbraco v6,检查搜索(不是完整的Lucene查询)。这是一个拉丁/南美洲网站。我问过我的同事,他们如何在搜索/URL中键入标题(字母上的重音符号),他们都说他们没有,他们只使用“常规”字符(a-Z,a-Z)。 我知道在传递到Examine时如何从字符串中去掉特殊字符,但我需要另一种方法,如Examine从属性中删除特殊字符以匹配查询。我有许多“节点”的名称中有标题(这是我正在搜索的属

  • 问题内容: 有人知道是否可以对SQL Server数据库中的列进行%LIKE%搜索,但可以忽略该列中的任何特殊字符吗? 因此,例如,如果我有一个名为“歌曲”的列,并且其中包含以下内容… 黑或白 直到布鲁克林不睡觉 船歌 爸爸别讲 如果用户搜索“直到布鲁克林之前都不会偷偷摸摸”,那么即使他们忘记了撇号,我也希望它返回一个匹配项。如果他们搜索“ SOUL”,我也希望它返回第四行。我确定你知道这个主意。

  • 我想用selenium登录这个网页。我尝试了selenium的find_element_by_,并使用浏览器中的检查元素。但是我无法登录。我在搜索id、名称、类名,这样我就可以用send_keys传递数据,但是没有做到这些。有人能帮助我提供一些代码来将数据推送到所需的字段吗?谢谢。这就是我到目前为止所做的。 在此之后,我试图点击按钮登录使用 但它失败了。它给出了无法找到“登录”的错误。由于默认情况

  • 使用ESLint是否可以忽略整个目录的一个特定规则? 在我的例子中,我想忽略为一个名为的目录

  • 问题内容: 如何使装饰器忽略有关缓存键的某些函数参数? 例如,我有一个看起来像这样的函数: 如果我像这样应用装饰器,它将包含在缓存键中。结果,如果我尝试使用相同但不同的函数调用该函数,它将再次执行,这是我想避免的。我只想考虑论点。 问题答案: 使用cachetools可以编写: