【发布时间】:2014-02-04 07:22:18
【问题描述】:
我是使用 jQuery 的 Spring Security 和 Spring MVC 的新手。我的 Spring Security 是基于 Spring Security 参考文档的非常基本的设置。我正在使用 Spring 3.2.4。
<http use-expressions="true">
<intercept-url pattern="/secure/login" access="permitAll" />
<intercept-url pattern="/secure/logout" access="permitAll" />
<intercept-url pattern="/secure/denied" access="permitAll" />
<session-management session-fixation-protection="migrateSession" session-authentication-error-url="/login.jsp?authFailed=true">
<concurrency-control max-sessions="10" error-if-maximum-exceeded="true" expired-url="/login.html" session-registry-alias="sessionRegistry"/>
</session-management>
<intercept-url pattern="/**" access="isAuthenticated()" />
<!-- <intercept-url pattern="/**" access="denyAll" /> -->
<form-login login-page="/secure/login" default-target-url="/" authentication-failure-url="/secure/denied" />
<logout logout-url="/secure/logout" logout-success-url="/" />
<expression-handler ref="defaultWebSecurityExpressionHandler" />
</http>
<authentication-manager>
<authentication-provider user-service-ref="com.ia.security.SpringSecurityDao" />
</authentication-manager>
<beans:bean id="com.ia.security.SpringSecurityDao" class="com.ia.security.SpringSecurityDaoImpl">
<beans:property name="usersByUsernameQuery">
<beans:value>select username,password,enabled
from user
where username = ?
</beans:value>
</beans:property>
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="enableGroups" value="true" />
<beans:property name="enableAuthorities" value="false" />
<beans:property name="groupAuthoritiesByUsernameQuery">
<beans:value>SELECT R.ID, R.NAME, P.NAME
FROM ROLE R
JOIN USER_ROLE UR on R.id = UR.role_id
JOIN USER U on U.id = UR.user_id
JOIN ROLE_PERMISSION RP ON RP.role_id = R.id
JOIN PERMISSION P ON P.id = RP.permission_id
WHERE U.username=?
</beans:value>
</beans:property>
</beans:bean>
在正常情况下,一切运行正常。我可以通过 jQuery.ajax 请求我的页面,并且我的回调按预期工作。但是,我不知道如何设置以处理会话超时或未经授权的访问响应。
例如,如果会话超时,并且我继续发出 Ajax 请求,Spring Security 会将调用重定向到登录页面。所以对 ajax 请求的响应最终是一个登录页面。在客户端,我需要能够知道用户不再有权访问请求的页面并采取适当的措施 - 即:将浏览器重定向到登录/错误页面。如果用户没有访问 url 的权限,情况也是如此。
我发现了与如何通过 ajax 配置登录相关的类似帖子,但我无法理解如何通过 ajax 处理未经授权的请求。我假设在 Ajax 调用的情况下,服务器应该返回一个特定的状态代码(例如:401 未授权等),并让 JS 处理差异代码,但不确定在哪里/如何配置该信息。
我试过查看AuthenticationFailureHandler 和AuthenticationSuccessHandler 类,但它们似乎甚至没有在我的配置中使用(在它们中设置断点甚至都没有命中),所以我真的很茫然了解什么/如何/在哪里配置必要的处理程序/过滤器/等。
【问题讨论】:
标签: jquery authentication spring-mvc spring-security