1

我正在使用 spring security 来实现我的应用程序的登录功能。大多数情况下,spring security 都可以正常工作。但有时它会发疯。那时,一些没有我设计的登录页面正在打开一个用户名和密码文本框。当我从那个未完全形成的登录页面登录时,我主页上的一些随机 png 或 js 文件被打开。然后我将从我的 url 中删除相应的 js 或 png 部分,然后按 enter。那时我的完整登录页面被打开,应用程序将按预期顺利运行。我不知道我的春季安全部分发生了什么。有人请帮忙。下面是我对spring security的配置。

<http auto-config="true" use-expressions="true">
    <!-- <intercept-url pattern="/loadISearch" access="ROLE_ADMIN" />  -->  

    <intercept-url pattern="/" access="permitAll" />
    <intercept-url pattern="/accessdenied**" access="permitAll" />
    <intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" />

        <form-login login-page="/" default-target-url="/dashboard1" authentication-failure-url="/accessdenied" />
        <logout invalidate-session="true" logout-success-url="/" /> 

    </http>
4

1 回答 1

1

我的猜测是以下是正在发生的事情:

  • 您的登录页面正在使用 CSS 和图像进行样式设置
  • Spring Security 拒绝访问您的 CSS / 图像文件,因为您尚未授予对它们的访问权限。因此,登录页面看起来与您预期的不同并且无法识别
  • 有时登录页面看起来很正常,因为浏览器缓存了 CSS / 图像。由于浏览器已经缓存了 CSS / 图像,因此它不会向容器询问资源,并且 Spring Security 无法保护它,因此登录页面会按照您的预期呈现。
  • Spring Security 的默认策略是保存您在身份验证之前发出的最后一个请求并将用户发送到那里。由于您的登录页面正在向受保护的资源(即 CSS、图像等)发出额外的请求,因此在验证后您将被发送到这些页面。由于请求是异步的,因此结果可能是不确定的。

要解决此问题,请确保您授予对登录页面使用的所有资源的访问权限。例如,如果您将所有 CSS、JS 和图像放在名为 /resources/ 的文件夹中,则可以按如下方式修改配置:

<http auto-config="true" use-expressions="true">
    <intercept-url pattern="/resources/**" access="permitAll" />

    <intercept-url pattern="/" access="permitAll" />
    <intercept-url pattern="/accessdenied**" access="permitAll" />
    <intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" />

    <form-login login-page="/" 
                default-target-url="/dashboard1" 
                authentication-failure-url="/accessdenied" />
    <logout invalidate-session="true" logout-success-url="/" /> 

</http>
于 2013-10-22T13:57:06.933 回答