我有问题。当我启动我的应用程序并且我第一次输入时,例如wwww.sitename.com/index,我被重定向到登录页面。然后,如果我再次输入wwww.sitename.com/index,我将重定向到索引页面。
我的配置可能有错误,但我无法理解错误
<security:session-management invalid-session-url="/login" session-authentication-error-url="/login" >
<security:concurrency-control max-sessions="1" expired-url="/login" error-if-maximum-exceeded="true"/>
</security:session-management>
<security:form-login
login-page="/login"
default-target-url="/index"
always-use-default-target="true"
authentication-success-handler-ref="customSuccessHandler"
authentication-failure-handler-ref="customFailureHandler"
username-parameter="j_username"
password-parameter="j_password" />
<security:logout
logout-success-url="/login"
delete-cookies="JSESSIONID"
invalidate-session="true" />
<security:intercept-url pattern="/" access="permitAll" />
<security:intercept-url pattern="/prv/**" access="hasRole('ROLE_USER')" />
<security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
根据我的拦截网址,我应该可以访问不在 prv 和 admin 文件夹下的所有网页而无需记录,不是吗?
答案 0 :(得分:2)
我认为问题是第一个陈述。
<security:session-management invalid-session-url="/login" session-authentication-error-url="/login" >
这里你说,如果用户提供了无效的会话ID,那么他应该被重定向到登录页面。一段时间后访问该页面时,您的会话已过期,可能会发生这种情况。尝试删除所有Cookie并再次访问该页面。
答案 1 :(得分:1)
Spring安全性开始以声明顺序评估您的intercept-url模式,并在第一次匹配时停止。所以在你的情况下,它匹配第一行
<security:intercept-url pattern="/" access="permitAll" />
每一个请求,并停止给予一切免费许可。它没有机会评估其他表达方式。
定义拦截网址时,必须先添加更多特定模式。例如:
<security:intercept-url pattern="/operation-one/admin/**" access="hasRole('ROLE_ADMIN')" />
<security:intercept-url pattern="/operation-one/**" access="hasRole('ROLE_USER')" />
<security:intercept-url pattern="/" access="permitAll" />
在你的情况下,只需将permit-all模式放在最后
答案 2 :(得分:1)
<security:intercept-url pattern="/" access="permitAll" />
仅允许访问根URL。如果您想允许访问任何URL,除了那些您有更多限制要求的URL,您应该改为:
<security:intercept-url pattern="/prv/**" access="hasRole('ROLE_USER')" />
<security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
<security:intercept-url pattern="/**" access="permitAll" />
按照目前的说法,任何index
子句都没有捕获到网址intercept-url
。