2013-10-22 44 views
1

我正在使用spring security来实现我的应用程序的登录功能。大部分时间春季安全工作正常,如预期。但偶尔它会发疯。那时候没有任何设计的登录页面会打开一个用户名和密码文本框。当我从未完全形成的登录页面登录时,我的主页中的一些随机png或js文件正在打开。然后我将从我的网址中删除相应的js或png部分,然后按回车。那时我完全成型的登录页面被打开,应用程序将按预期顺利运行。我不知道我的弹簧安全部件发生了什么。有人请帮忙。以下是我的弹簧安全配置。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> 

回答

1

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

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

要解决该问题,请确保您授予访问您登录页面使用的所有资源的权限。例如,如果你把所有的CSS,JS和图片名为/资源文件夹中的/你可以修改配置如下:

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

非常感谢您罗布给了我一个很好的洞察力。 –