初次使用,有不足之处还请多多指教。
前提:现有系统里已经有了很多跟User相关的类例如UserContext, UserInfo等,在原来的action里已经实现了登陆验证,并且已经
把登陆成功后返回的UserContext保存到session中了,在目前的程序中很多地方都已经使用了从保存在session中的UserContext获取
用户信息的代码了(当然这是一个统一的方法)
目标:在不改变现有代码的情况下集成ACEGI到系统中(当然Action中的login是肯定要改的了),我的意思是不改变代码中获得UserContext的方式
过程:
1:修改web.xml,加入FilterToBeanProxy,增加applicationContext-acegi-security.xml文件,按照sample配置这个xml文件,相关的配置
从前的帖子上有,请执行查找。
2:改造登陆过程,login页面必须包含j_username, j_password这两个字段,用来存放username和password,以便在AuthenticationProcessingFilter
中获得用户输入的用户名和密码,这一点有写霸道,必须用这两个名字,要么不用,这是我在系统里修改的第一个地方,不过再想想,我原来
再action中得到用户名和密码就是用来验证的,现在acegi做了这件是,我把原来的字段改掉也没有什么影响。
3:再AuthenticationProcessingFilter中我使用了daoAuthenticationProvider来验证用户的合法性,对于DaoAuthenticationProvider,它的
关键在于userDetailsService这个属性,DaoAuthenticationProvider通过userDetailsService来获得UserDetails,而我们系统中获得用户信息的
方法远比org.acegisecurity.userdetails.jdbc.JdbcDaoImpl复杂,在现有系统中有一个UserService接口专门来处理User相关的事情,所以我
对UserService接口的实现类UserServiceImpl进行了改造是期实现UserDetailsService接口,返回UserServece对象。
4:现有系统中UserContext类已经包含了完整的用户信息,系统中很多地方都用到了这个类,所以这个类不能够废除,方法是使UserContext
实现UserServece,其实在UserServiceImpl返回的UserServece对象就是UserContext类型的。
5:实现自己的passwordEncoder,由于系统中password的加密方式跟acegi提供的不同,所以么实现自己的passwordEncoder,其实只需要
继承org.acegisecurity.providers.encoding.BasePasswordEncoder,实现org.acegisecurity.providers.encoding.PasswordEncoder即可
在encodePassword方法中实现现有的加密方法,在isPasswordValid方法中判断密码的合法性。
6:action.login中的改动,原来login中从页面获得用户输入的用户名,密码调用UserService进行验证,返回UserContext对象,然后把UserContext
对象set到Session相关的对象中去,例如(简单起见)
代码
- session.setAttribute(someKey, uctx);
<script>render_code();</script>
现在用户认证的过程被acegi做了,那action.login做什么呢?怎么得到UserContext呢,其实很简单
代码
- Authentication auth = SecurityContextHolder.getContext().getAuthentication();
- UserContext userCtx = (UserContext)auth.getPrincipal();
<script>render_code();</script>
done
7:剩下的事情就是在acegi中配置权限了。 |
相关推荐
### Acegi安全框架详解 #### 引言 Acegi安全框架是专为Spring框架设计的安全解决方案,它通过深度集成Spring的特性,提供了一套全面、灵活的安全管理方案。不同于传统的安全框架,Acegi采用了面向切面编程(AOP)...
SSH整合的关键步骤包括: 1. 配置Spring Security:首先,需要在Spring的配置文件中引入Spring Security的相关依赖,配置认证和授权规则,定义用户、角色和权限的关系。 2. 集成Hibernate:在Spring配置文件中配置...
四、整合步骤 1. 引入依赖:首先,在项目中引入Struts2和Spring的库文件,确保版本兼容。 2. 配置Struts2:创建`struts.xml`配置文件,定义Action类及其对应的处理方法。 3. 配置Spring:创建`applicationContext....
整合过程:** 整合S2SH框架涉及到多个步骤,包括配置各个框架的依赖、编写Action、DAO和Service层的代码,以及设置Struts2的配置文件和Spring的bean定义。这需要对每个框架有深入理解,以确保它们协同工作。 综上...
- **解决方案**:提供解决Acegi与DWR整合中安全性问题的具体策略。 #### 五、JavaScript编程技巧 ##### 5.1 简单的回调函数 - **实现方式**:通过定义JavaScript函数作为回调,当服务器端方法执行完毕后调用该函数...
#### 四、配置详解 **2.1 主要配置** DWR的配置主要包括`web.xml`和`dwr.xml`两个文件。 - **2.2 常用<init-param>参数列表** - **2.2.1 安全参数**:用于设置安全相关的选项,例如是否启用CSRF保护。 - **...
随着Web 2.0技术的兴起,Ajax作为一种重要的前端技术受到了广泛关注。它不仅提升了用户体验,还简化了开发过程。对于想要深入了解Ajax及其相关技术的开发者而言,《AJAX学习资料之-DWR中文手册》提供了一个很好的...
**DWR与Acegi整合**:结合Acegi安全框架,DWR能够实现细粒度的安全控制,保护应用不受攻击。 #### 四、DWR中的JavaScript应用 **简单的回调函数**:展示了如何使用DWR实现JavaScript对服务器端Java方法的调用,并...
**DWR与Acegi**:Acegi是一个Spring的安全框架,通过一定的配置可以与DWR集成,实现更强大的安全控制。 通过以上介绍,我们可以看出DWR不仅自身功能强大,还能够很好地与其他流行的Java Web框架进行整合,从而大大...
**步骤详解**: 1. **将DWR放入你的工程**:首先需要将DWR的相关jar包添加到项目中。 2. **编辑配置文件**:配置`web.xml`文件以启用DWR服务。 3. **编写service**:创建一个包含要暴露给JavaScript调用的Java类。 ...
### DWR技术详解 #### 一、DWR概述 DWR (Direct Web Remoting) 是一种简化客户端与服务器端交互的技术。它通过Ajax的方式实现了Java对象与JavaScript对象之间的透明通信,使得开发者能够在浏览器端直接调用服务器...