`
dwangel
  • 浏览: 267423 次
社区版块
存档分类
最新评论

当SpringSecurity可以在Ajax调用时返回401

 
阅读更多
为了省事和配置文件的干净,SpringSecurity是用的namespace方式声明的。

namespace方式有个麻烦在于很多配置固定而不好改变。
现在 有个需求是让Ajax的JSON调用返回的401以便前端JS可以识别status来刷新页面。

查文档和看源码后,终于有这个方案:
<http>创建的ExceptionTranslatorFilter在检测到 权限异常时,
会调用EntryPoint的commence方法。
<form-login />的后台处理会建立一个EntryPoint : LoginUrlAuthenticationEntryPoint,
<http>的解析代码,在没有指定EntryPoint时,使用<form-login>等tag创建的EntryPoint。
因此,重载LoginUrlAuthenticationEntryPoint的commence方法:
@Override
	public void commence(HttpServletRequest request,
			HttpServletResponse response, AuthenticationException authException)
			throws IOException, ServletException {
		if (StringUtils.contains(request.getHeader("Accept"), "application/json")) {
        	response.sendError(HttpServletResponse.SC_UNAUTHORIZED, 
        			"Authentication Failed: " + authException.getMessage());
        } else {
        	super.commence(request, response, authException);
        }
	}

最后,修改相关的applicationContext文件:
<http use-expressions="true" auto-config="false" entry-point-ref="myEntryPoint">
....
</htt>
<beans:bean id="myEntryPoint" class="com.yunling.mediacenter.man.MyLoginUrlAuthenticationEntryPoint">
<beans:property name="loginFormUrl" value="/login" />
</beans:bean>
分享到:
评论

相关推荐

    spring3+struts2+hibernate3+dwr3+spring security3+ajax完整实例

    这是一个基于Java技术栈的Web应用实例,整合了Spring 3、Struts 2、Hibernate 3、Direct Web Remoting (DWR) 3、以及Spring Security 3,并且利用Ajax进行异步通信,实现了数据库配置的权限管理。下面将详细阐述这些...

    spring security 参考手册中文版

    在Spring Security之前放置MultipartFilter 150 包含CSRF令牌 151 18.5.5隐藏的HttpMethodFilter 151 18.6覆盖默认值 151 19. CORS 152 20.安全性HTTP响应头 154 20.1默认的安全头 154 20.1.1缓存控制 157 20.1.2...

    ajax调用java实例源码-spring-security-ajax:验证SpringSecurity是否适用于完整的AJAX库,例如Emb

    ajax调用java实例源码一、简介 自 2010 年以来,出现了许多丰富的 JavaScript 框架,允许开发人员通过 Web 提供接近桌面质量的用户体验。 Web 应用程序的传统 HTTP 请求-响应流正逐渐被 AJAX 流取代。 随着诸如 ...

    Spring Security3技术手册

    - Spring Security支持在`spring-security.xml`配置文件中使用特定的命名空间简化配置过程。 - **示例代码**: 使用`&lt;http auto-config="true"&gt;`简化HTTP安全配置。 - **1.3 完善整个项目** - 包括设置依赖、创建...

    前后端分离 -- Spring Boot + Spring Security + Vue + ElementUI 实现用户认证

    4. 后续的API调用,前端需要附带上这个令牌,Spring Security会根据令牌检查用户的身份和权限。 5. 如果请求需要特定权限,Spring Security会进行权限校验,只有满足条件的请求才会被允许。 Vue.js是一个轻量级的...

    struts2+spring+ibatis+jquery ajax的登陆注册实时验证

    在登录注册系统中,Spring可以用来管理Bean(如DAO、Service等)的生命周期,实现事务管理,并且可以通过Spring Security模块提供安全控制,如用户认证和授权。 iBatis是一个SQL映射框架,它将SQL语句与Java代码...

    Jsf整合三大框架及Spring Security

    在JSF应用中集成Spring Security,可以实现细粒度的权限控制,保护应用程序免受非法访问。例如,可以设置特定的URL或方法需要特定的角色才能访问,或者根据用户权限动态调整界面展示内容。 5. **Spring TestSuite**...

    Struts2+Spring+Ajax实现的用户登录

    Struts2、Spring和Ajax是Java Web开发中的三个重要框架,它们协同工作可以构建出高效、灵活的Web应用程序。在用户登录场景中,这三者的结合尤为重要,它们各自承担着不同的职责,共同确保用户能够方便、安全地进行...

    Spring Security

    当用户尝试登录时,Spring Security会查询数据库以验证用户凭据是否正确。 **3.3.2 检验用户权限** 登录成功后,Spring Security会根据用户的权限信息来决定用户能否访问特定资源。 **4. 自定义登录页面** **4.1...

    Spring+Oracle+Ajax做的图书管理系统

    5. Ajax接口:前端通过Ajax调用后端接口,实现异步操作,如图书列表的分页加载、实时搜索等。 设计文档通常会包含系统架构图、模块设计、数据库设计、接口设计等内容,帮助开发者理解系统的整体结构和各个部分的...

    mavenSSH+Ajax2

    4. **库与框架**:jQuery、Prototype等JavaScript库在Ajax 2的实践中扮演重要角色,它们简化了跨浏览器的Ajax调用,并提供了丰富的DOM操作方法。 **结合Maven SSH和Ajax 2的Web应用开发** 结合Maven SSH和Ajax 2,...

    基于SpringBoot,Spring Security,JWT,Vue &amp; Element 的前后端分离的.zip

    在前后端分离的应用中,当用户成功登录后,服务器会返回一个JWT,客户端将其存储在本地(通常是Cookie或LocalStorage),然后在后续请求中附带此令牌,服务器通过验证令牌来确定用户的身份,实现状态管理。...

    spring-security-3.0.8

    - **Spring Boot集成**:在Spring Boot项目中,可以利用starter自动配置简化Spring Security的集成。 7. **故障排查与优化** - 错误页面配置:定制错误页面以提供友好的用户体验。 - 性能调优:合理配置过滤器链...

    Ajax里jQuery的ajax与ssh集成

    当我们谈论Ajax与jQuery的ajax方法与SSH框架的集成时,实际上是在讨论如何在前端使用jQuery的Ajax功能与后端SSH框架进行通信,实现数据的无刷新交互。 首先,jQuery的`$.ajax()`方法是核心工具,它允许我们发起异步...

    spring3mvc+hibernate4+spring-security3+dwr3整合架包

    Spring Security提供了细粒度的访问控制,可以为不同的URL、方法或特定的业务对象设置权限。此外,它还支持CSRF防护、密码加密、会话管理等安全特性,确保应用程序的安全性。 DWR(Direct Web Remoting)3则是一种...

    dwr的例子 反向AJAX 实现时时提醒

    当服务器端的方法执行完毕并返回结果时,指定的JavaScript函数会被调用,接收并处理返回的数据。 在你提供的例子中,`dwr使用.java`可能包含了一个简单的示例,演示了如何使用DWR调用服务器端的方法。`MyUtils_Log....

    springboot-ajax前后端交互项目

    在本项目中,前端使用jQuery或Vue.js等库实现AJAX调用,异步地发送HTTP请求到后端,并处理返回的数据。 4. **JSON数据格式** 在前后端交互中,数据通常以JSON(JavaScript Object Notation)格式传输,因为它轻量...

    springboot+ajax的小例子

    在本项目"springboot+ajax的小例子"中,主要展示了如何使用SpringBoot框架与Thymeleaf模板引擎、SpringData JPA进行前后台交互,实现数据的增删查改(CRUD)操作。这个实例对初学者来说是极好的学习材料,能够帮助...

    SSH+ztree+ajax+json

    2. **客户端**:通过Ajax调用服务器端的接口,获取JSON数据。这通常会使用jQuery的$.ajax或$.getJSON方法。 3. **数据解析**:Ajax请求成功后,前端JavaScript将接收到的JSON数据解析成JavaScript对象,为ZTree准备...

    ssm+ajax省市区联动

    8. **性能优化**:为了提高用户体验,可以在初次加载页面时预加载部分常用数据,减少后续Ajax请求的延迟。同时,可以通过缓存策略,比如Redis,来缓存频繁访问的省市区数据,减少数据库查询压力。 9. **安全考虑**...

Global site tag (gtag.js) - Google Analytics