`

spring security 3中关于ajax的处理

阅读更多
  在spring security 3中,对于某些需要保护的url,可以很容易地实现当没权限的时候,
redirect到一个页面(比如自定义的404.jsp页面)进行显示没权限的信息;
但有的时候,必须要对一些AJAX的请求url也同时判断其是否有权限输出;
如果没权限的话,一般要以JSON的方式返回给用户端,比如弹出一个提示框,显示没权限;
   在SPRING security 3中,当没权限的时候,会由spring security 自己的拦截器
AccessDeniedHandler 进行拦截的,因此,可以在这个地方进行扩展自定义,
然后统一返回给前端的都是json的方式,并且在前端的jquery js中,扩展jquery post的
方法,如果对json返回的结果中,有相关“没权限操作”的信息,则弹出错误提示框,
这样,只需要在要用到$ajax提交的页面中,引入js就可以了,下面看代码实现。


1) 首先,实现AccessDeniedHandler 类;
  

public class MyAccessDeniedHandlerImpl implements AccessDeniedHandler  {
	
	
	public MyAccessDeniedHandlerImpl()
	{
		
	}
	public String getAccessDeniedUrl() {
		return accessDeniedUrl;
	}
 

	public void setAccessDeniedUrl(String accessDeniedUrl) {
		this.accessDeniedUrl = accessDeniedUrl;
	}

  public MyAccessDeniedHandlerImpl(String accessDeniedUrl)
  {
	  this.accessDeniedUrl=accessDeniedUrl;
  }
	private String accessDeniedUrl;

	
	@Override
	public void handle(HttpServletRequest req,
			HttpServletResponse resp, AccessDeniedException reason) throws ServletException,
			IOException {
		boolean isAjax = "XMLHttpRequest".equals(req.getHeader("X-Requested-With"));
		
//如果是ajax请求
		if (isAjax) {		
			
			String jsonObject = "{\"message\":\"You are not privileged to request this resource.\","+
			//		"\"access-denied\":true,\"cause\":\"AUTHORIZATION_FAILURE\"}";
			String contentType = "application/json";
			resp.setContentType(contentType);
			String jsonObject="noright";
			PrintWriter out = resp.getWriter();
			out.print(jsonObject);
			out.flush();
			out.close();
			return;
		}
		else
		{
		
		 String path = req.getContextPath();
		 String basePath = req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+path+"/";
		 resp.sendRedirect(basePath+accessDeniedUrl);
		}
		
		
	}



  在上面的处理中,判断如果是ajax处理,则输出json字符串给客户端,否则就
redirect到指定的accessDeniedUrl,

2) 在applicationContext-security.xml中进行设置,如下:
   
    <http auto-config="true">
	<intercept-url pattern="/admin*" access="ROLE_ADMIN" />
	<access-denied-handler ref="accessDeniedHandler"/>
   </http>


		<beans:bean id="accessDeniedHandler" 
	class="com.test.MyAccessDeniedHandlerImpl">
	<beans:property name="accessDeniedUrl" value="403.jsp" />
   </beans:bean>


3) springsecurity.js
  

(function($){
    // 保存原有的jquery ajax;
    var $_ajax = $.ajax;
    
	$.ajax = function(options){
		var originalSuccess,
			mySuccess,
			success_context;
	
		if (options.success) {
                        // save reference to original success callback
			originalSuccess = options.success;
			success_context = options.context ? options.context : $;
			
                        // 自定义callback
			mySuccess = function(data) {
				
				
									   
                           
                            if (data['access-denied']) {
                                  if (data.cause==='AUTHENTICATION_FAILURE') {
                                    alert('登录超时,请重新登录.');
					window.location.href = contextPath + '/';
                                  } else if (data.cause==='AUTHORIZATION_FAILURE') {
									   if (data=="noright")
									   {
                                        alert('对不起,你没有访问该资源的权限.');
									   }
				    }
                                   return;
						
							 
                                // call original success callback							
				originalSuccess.apply(success_context, arguments);
			};
                        // override success callback with custom implementation
			options.success = mySuccess;
		}
		
                // call original ajax function with modified arguments
		$_ajax.apply($, arguments);
	};
	
})(jQuery);


    
5
2
分享到:
评论

相关推荐

    SpringBoot+SpringSecurity处理Ajax登录请求问题(推荐)

    SpringBoot+SpringSecurity处理Ajax登录请求问题是SpringBoot开发中的一個常见问题,本文将详细介绍如何使用SpringBoot+SpringSecurity处理Ajax登录请求问题。 知识点1:SpringBoot+SpringSecurity框架简介 ...

    spring security ajax请求与html共存

    在这个主题“spring security ajax请求与html共存”中,我们将探讨如何在使用Spring Security的同时处理Ajax(异步JavaScript和XML)请求,并确保与HTML页面的正常交互。 1. **Spring Security基础** Spring ...

    spring security 数据库存储资源信息 记住我 支持AJAX

    在提供的压缩包文件"springsecurity_database"中,可能包含了示例代码、配置文件和其他相关资源,可以帮助你理解和实现上述功能。在实际项目中,你需要根据自己的需求调整和扩展这些示例,以构建一个符合业务场景的...

    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用户权限项目

    3. **过滤器链(Filter Chain)**:Spring Security 使用一系列过滤器处理请求,如 `SecurityContextPersistenceFilter` 保存和恢复安全上下文,`UsernamePasswordAuthenticationFilter` 处理登录请求。理解过滤器链...

    springsecurity3.0.5应用

    6. **CSRF防护**:为防止跨站请求伪造(Cross-Site Request Forgery)攻击,Spring Security提供了内置的CSRF保护,可以通过添加特定的token到表单或Ajax请求中来验证请求的合法性。 7. **AOP(面向切面编程)**:...

    springsecurity前端素材.zip

    在本“springsecurity前端素材”中,我们有两个主要的文件夹:templates和static,它们分别代表了前端展示层的不同方面。 **templates** 文件夹通常包含了应用的HTML模板文件,这些文件被用于构建用户界面。在...

    SpringBoot项目+SpringSecurity+前端静态资源

    在本项目中,"SpringBoot项目+SpringSecurity+前端静态资源"是一个综合性的开发实践,主要涉及了Spring Boot和Spring Security这两个核心的Java框架,以及前端的静态资源管理。Spring Boot简化了Java应用的初始化和...

    spring security 参考手册中文版

    3. Spring Security 4.2的新特性 27 3.1 Web改进 27 3.2配置改进 28 3.3杂项 28 4.样品和指南(从这里开始) 28 5. Java配置 29 5.1 Hello Web安全Java配置 29 5.1.1 AbstractSecurityWebApplicationInitializer 31 ...

    Spring Security权限管理开发手册

    - **登录页面中的参数配置:** 设置登录页面的请求参数,确保Spring Security能够正确处理这些参数。 - **测试一下:** 测试自定义登录页面的功能是否正常。 - **第5章:使用数据库管理资源** - **数据库表结构...

    Spring Security3技术手册

    ### Spring Security3技术手册知识点概览 #### 一、基础篇 **1. 一个简单的Hello World** - **1.1 配置过滤器** - Spring Security通过一系列的过滤器来实现对Web应用程序的安全控制。了解如何配置这些过滤器是...

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

    本篇文章将深入探讨“spring3mvc+hibernate4+spring-security3+dwr3整合架包”中的核心技术和概念,帮助开发者理解如何利用这些组件来创建强大的Java Web应用。 首先,Spring MVC(Model-View-Controller)是Spring...

    Spring Security Third Edition.pdf英文版

    Architect solutions that leverage the full power of Spring Security while remaining loosely coupled. Implement various scenarios such as supporting existing user stores, user sign up, authentication, ...

    spring-security-core-2.0.5.RELEASE.jar修改使得满足ajax登录需求

    更改了RedirectUtils类的 response.sendRedirect(response.encodeRedirectURL(finalUrl)); 改为了 StringBuffer str = new StringBuffer(); str.append("{"); str.append("status: \"true\",");...

    spring security form表单,基于ajax请求,包含多登出方式

    spring security form表单,基于ajax请求,用于前后端分离,包含多登出方式

    Springboot+SSM+security+ajax+bootstrap+jquery+mysql

    同时,它还结合了Spring MVC(Spring Framework的模块,简称SSM中的S)、Spring Security以及MySQL数据库,以实现全面的后端功能和数据管理。 【描述】"Springboot+SSM+security"这部分描述了项目的三个主要技术栈...

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

    Struts2、Spring、iBatis和jQuery AJAX是Java Web开发中的四大核心技术,它们共同构建了一个功能强大的MVC(模型-视图-控制器)架构。本文将深入探讨这些技术在登录注册系统中的应用。 首先,Struts2是Apache基金会...

    Ajax登陆使用Spring Security缓存跳转到登陆前的链接

    关于使用Ajax进行登录并使用Spring Security缓存跳转回登录前的URL的实现方法,主要涉及的IT知识点如下: 1. **Ajax的定义与作用** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个页面的情况下...

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

    Spring Security是Spring生态系统中的安全模块,提供了一套完整的身份验证和授权解决方案,包括登录、权限控制等功能。 在前后端分离的架构下,Spring Boot作为后端服务器,主要负责处理业务逻辑和数据操作。通过...

    基于SSM的循环水能效管理系统,使用Bootstrap、JSP、SpringSecurity、Ajax、JSON.zip

    本项目是一个基于SSM(Spring、SpringMVC、MyBatis)框架的循环水能效管理系统,采用现代前端技术如Bootstrap、JSP、Ajax以及数据交换格式JSON,同时结合SpringSecurity进行安全控制。这个系统主要适用于高校计算机...

Global site tag (gtag.js) - Google Analytics