`

acegi源码分析

    博客分类:
  • java
 
阅读更多

 

 

 

     AbstractProcessingFilter中doFilter方法源码

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// 这里检验是不是符合ServletRequest/SevletResponse的要求
		if (!(request instanceof HttpServletRequest)) {
			throw new ServletException("Can only process HttpServletRequest");
		}

		if (!(response instanceof HttpServletResponse)) {
			throw new ServletException("Can only process HttpServletResponse");
		}
		
		HttpServletRequest httpRequest = (HttpServletRequest) request;
		HttpServletResponse httpResponse = (HttpServletResponse) response;
		// 根据HttpServletRequest和HttpServletResponse来进行验证
		if (requiresAuthentication(httpRequest, httpResponse)) {
			if (logger.isDebugEnabled()) {
				logger.debug("Request is to process authentication");
			}
			// 这里定义Acegi中的Authentication对象来持有相关的用户验证信息
			Authentication authResult;
			
			try {
				onPreAuthentication(httpRequest, httpResponse);
				// 这里的具体验证过程委托给子类完成,比如AuthenticationProcessingFilter来完成基于Web页面的用户验证
				authResult = attemptAuthentication(httpRequest);
			} catch (AuthenticationException failed) {
				// Authentication failed
				unsuccessfulAuthentication(httpRequest, httpResponse, failed);
				
				return;
			}

			// Authentication success
			if (isContinueChainBeforeSuccessfulAuthentication()) {
				chain.doFilter(request, response);
			}
			// 完成验证后的后续工作,比如跳转到相应的页面
			successfulAuthentication(httpRequest, httpResponse, authResult);
			
			return;
		}

		chain.doFilter(request, response);
	}

 

   

     AuthenticationProcessingFilter中attemptAuthentication方法源码

	public Authentication attemptAuthentication(HttpServletRequest request)
			throws AuthenticationException {
		// 这里从HttpServletRequest中得到用户验证的用户名和密码
		String username = obtainUsername(request);
		String password = obtainPassword(request);

		if (username == null) {
			username = "";
		}

		if (password == null) {
			password = "";
		}
		// 这里根据得到的用户名和密码去构造一个Authentication对象提供给AuthenticationManager进行验证,里面包含了用户的用户名和密码信息
		UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(
				username, password);

		// Place the last username attempted into HttpSession for views
		request.getSession().setAttribute(ACEGI_SECURITY_LAST_USERNAME_KEY,
				username);

		// Allow subclasses to set the "details" property
		setDetails(request, authRequest);
		// 这里启动AuthenticationManager进行验证过程
		return this.getAuthenticationManager().authenticate(authRequest);
	}

   

   

分享到:
评论

相关推荐

    acegi源码解读.txtacegi源码解读.txtacegi源码解读.txt

    ### acegi源码解读:深度剖析Spring Security核心组件 #### 引言 在现代Web应用开发中,安全性是至关重要的一个方面。Spring Security作为Spring框架的一部分,提供了强大的安全功能,包括认证、授权、会话管理等...

    acegi-security源码包

    通过对源码的分析,开发者可以更深入地了解安全设计模式,提高应用的安全性和可靠性。同时,这也是一个提升Java和Spring框架技能的好机会,因为Acegi Security充分利用了Spring的特性,展示了如何在实际项目中应用...

    spring源码分析(1-10)

    Spring 源代码分析系列涵盖了多个关键模块,包括事务处理、IoC容器、JDBC、MVC、AOP以及与Hibernate和Acegi安全框架的集成。以下是对这些知识点的详细阐述: 1. **Spring 事务处理**:Spring 提供了声明式事务管理...

    acegi登陆源码(没有导spring和struts的包)

    对于初学者来说,理解和分析Acegi Security的源码可以帮助深入理解Web应用的安全机制。不过,由于Acegi已经被Spring Security取代,学习过程中需要注意将学到的概念应用到更现代的框架中。 8. **持续学习和进步**...

    spring的acegi应用

    这可能是一份关于Acegi在Spring中应用的详细教程或案例分析。通常,这种文档会包含实际的代码示例、配置说明以及可能出现的问题和解决方案。由于无法直接查看文档内容,建议下载并阅读这份文档以获取更深入的理解。 ...

    acegi-security-1.0.4.jar的源码

    在分析`acegi-security-1.0.4.jar`的源码之前,我们需要了解Acegi Security的基本概念和架构。 Acegi Security的核心目标是提供一个灵活、可扩展的安全框架,允许开发者对用户认证、授权进行细粒度控制。它基于...

    使用 Acegi 保护 Java 应用程序: 续二

    6. **源码分析**:由于标签中有“源码”一词,博文可能深入讲解了 Acegi 源码的某个部分,帮助读者理解其内部工作原理,或者展示了如何根据需求自定义 Acegi 组件。 7. **工具使用**:标签中的“工具”可能指的是 ...

    菜鸟-手把手教你把Acegi应用到实际项目中(1.2)

    9. **日志和监控**:Acegi有丰富的日志功能,可以帮助你跟踪和分析系统的安全事件。同时,可以集成Spring Actuator等工具来监控安全相关的指标。 10. **升级至Spring Security**:虽然Acegi在当时是一个非常优秀的...

    acegi

    7. **acegi-sample.rar**:这是一个示例项目,可能包含了一个运行中的 Acegi 安全配置,通过分析这个项目,可以更直观地了解 Acegi 的工作原理和配置方式。 总之,Acegi 是 Spring 框架的一个强大安全扩展,尽管...

    Acegi(四):Acegi初体验及初解剖

    标签"源码"暗示博主可能会分析一些关键类的实现,帮助读者理解Acegi是如何处理认证和授权的底层逻辑。同时,"工具"标签可能意味着博主还会介绍一些辅助工具或调试技巧,帮助开发者更好地使用和调试Acegi。 至于...

    acegi实现用户权限

    源码分析有助于理解框架内部的工作机制,而工具则强调了Acegi Security作为一个方便的开发工具的角色。 不过,压缩包中的文件名称列表(产品分类浏览.JPG、首页.JPG、商品详情.JPG)似乎与Acegi Security的直接技术...

    acegi-2.rar

    综上所述,“acegi-2.rar”中的内容可能包含了AceGI框架的源码、文档、示例应用以及相关的配置文件。通过学习和使用AceGI,开发者能够构建出更安全、更健壮的企业级Java应用。然而,值得注意的是,AceGI后来已被...

    acegi集成CAS示例

    通过分析和运行这个项目,开发者可以深入理解AceGI和CAS的集成过程。 5. **最佳实践**:在实际部署中,应确保CAS服务器和应用系统的安全,例如使用SSL/TLS加密通信,定期更新安全策略,以及对用户凭证进行强加密...

    springside 玩转acegi

    **源码分析**: 在`AuthenticationProcessingFilter`的实现中,可以关注以下几个关键方法: - `attemptAuthentication`: 这是执行身份验证的核心方法,它从请求中提取出用户名和密码,创建`Authentication`对象,...

    spring2 struts2 acegi

    6. 源码分析,理解每个框架的关键类和接口的工作方式,有助于解决集成过程中的问题。 7. 使用开发工具,如IntelliJ IDEA或Eclipse,安装相应的插件来支持Spring、Struts 2和Spring Security的开发。 总之,"spring2...

    实战Acegi

    审计功能可以帮助管理员跟踪和分析系统的安全行为,以便发现潜在的安全漏洞。 在实际项目中,集成Acegi(或现在的Spring Security)可能涉及以下步骤: 1. 引入Acegi依赖库。 2. 配置Acegi安全上下文,定义安全策略...

    spring源码分析

    《Spring源码分析》 Spring框架作为Java领域中不可或缺的一部分,其强大之处在于它提供了丰富的功能,包括依赖注入(Dependency Injection,简称DI)、面向切面编程(Aspect-Oriented Programming,简称AOP)、事务...

Global site tag (gtag.js) - Google Analytics