- 浏览: 402788 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
xxbb77:
说的有点道理
保持好奇心,把时间花在刀刃上 -
JavaAiHaoZhezh:
有时候需要学会放手,别让自己太劳累 -
1011729483:
你好:楼主我想请问一下刚开始你访问项目进去login.jsp页 ...
菜鸟-手把手教你把Acegi应用到实际项目中(2) -
zhglance:
很赞,胜过好多出版物
程序员必备:Linux日常维护命令 -
zizhi9999:
为什么我的总是说timeout呢 很急 啊
利用SNMP获取、走访节点值
一个能为DaoAuthenticationProvider提供存取认证库的的类,它必须要实现UserDetailsService接口:
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException;
UserDetails 是一个接口,它能提供一系列get函数以获得认证时需要的基本认证信息如用户名、密码、所获得的授权、是否禁用等;一个具体的实现就是User类. Acegi用户需要决定什么时候写他们的UserDetailsService接口以及返回的UserDetails是什么类型。在大多数情况下将使用 User及其子类,虽然在特定的环境中(如对象关系映射器)也许需要用户写他们自己的UserDetails实现。UserDetails也经常用于存储一些与调用者相关的附加信息(如电话号码、email地址等)因此它们经常在web视图中使用。
如果UserDetailsService实现起来很简单,用户应当很容易从他们选择的持久化策略中找回认证信息。
DaoAuthenticationProvider设计没有考虑支持帐户锁定的功能,因为那将增加UserDetailsService接口的复杂性。例如需要增加不成功认证的计数,这些功能可能通过补充应用程序的公布特性而很容易提供。
1、前面几节我们采用的是Acegi自带的两个类,即UserDetailsService接口的两个实现类JdbcDaoImpl和InMemoryDaoImpl,配置如下:
InMemoryDaoImpl:
<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <property name="userDetailsService" ref="inMemDaoImpl" /> </bean> <bean id="inMemDaoImpl" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl"> <property name="userMap"> <value> javaee=password,ROLE_SUPERVISOR </value> </property> </bean>
JdbcDaoImpl:
<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <property name="userDetailsService" ref="jdbcDaoImpl" /> </bean> <bean id="jdbcDaoImpl" class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl"> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean>
2、自己提供UserDetailsService接口的实现类
当Acegi所提供的实现机制无法满足实际企业应用时,我们往往会扩展Acegi现有的资源以弥补不足之处。同样,如果UserDetailsService接口的两个实现类JdbcDaoImpl和InMemoryDaoImpl已经满足不了我们的需求,那么此时提供自己的实现类以满足现实需求是非常有必要的。
一般实现步骤:
1)实现UserDetails接口:
public interface UserDetails extends Serializable { public abstract GrantedAuthority[] getAuthorities(); // 获取用户的授权信息 public abstract String getPassword(); // 获取用户密码(凭证) public abstract String getUsername(); // 获取用户名 public abstract boolean isAccountNonExpired(); // 判断帐号是否已经过期 public abstract boolean isAccountNonLocked(); // 判断帐号是否已被锁定 public abstract boolean isCredentialsNonExpired(); // 判断用户凭证是否已经过期 public abstract boolean isEnabled(); // 判断用户帐号是否已启用 }
如果帐号过期、被锁定、凭证过期或帐号未启用,均不能登录到系统中。
本例提供的实现类:
public class UserLoginDetails implements UserDetails { private String username; private String password; private boolean enabled; private GrantedAuthority[] authorities; public void setAuthorities(GrantedAuthority[] authorities) { this.authorities = authorities; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public void setPassword(String password) { this.password = password; } public void setUsername(String username) { this.username = username; } public GrantedAuthority[] getAuthorities() { return authorities; } public String getPassword() { return password; } public String getUsername() { return username; } public boolean isAccountNonExpired() { return enabled; } public boolean isAccountNonLocked() { return enabled; } public boolean isCredentialsNonExpired() { return enabled; } public boolean isEnabled() { return enabled; } }
2)实现UserDetailsService接口:
public interface UserDetailsService { public abstract UserDetails loadUserByUsername(String s) throws UsernameNotFoundException, DataAccessException; }
本例提供的实现类为:
public class UserLoginServiceImpl implements UserDetailsService { // 根据用户名返回用户信息 public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { // 以下两行是获取用户信息,UserLogin是存放用户信息的业务实体 BaseDaoImpl baseDao = new BaseDaoImpl(); UserLogin userLogin = baseDao.getUserInfo(username); UserLoginDetails userDetails = new UserLoginDetails(); if (userLogin != null) { // 如果该用户的信息存在,那么构造UserDetails userDetails.setUsername(userLogin.getUsername()); // 设置用户名 userDetails.setPassword(userLogin.getPassword()); // 设置密码 userDetails.setEnabled(userLogin.isEnabled()); // 设置启用状态 // 角色字符串如:”ROLE_SUPERVISOR,ROLE_USER”。以逗号隔开 String[] rights = userLogin.getRights().split(","); // 分割多个角色 // 设置用户的授权信息 GrantedAuthority[] authorities = new GrantedAuthority[rights.length]; for (int i = 0; i < rights.length; i++) { authorities[i] = new GrantedAuthorityImpl(rights[i]); } userDetails.setAuthorities(authorities); } else { // 如果该用户不存在,则抛出异常,参考JdbcDaoImpl throw new UsernameNotFoundException("User not found"); } return userDetails; } }
UserLogin类:
public class UserLogin { private String username; // 用户名 private String password; // 密码 private boolean enabled; // 启用状态 private String rights; // 多个角色组成的字符串 ...... // 省略get,set方法 }
3)将自己的实现类注入到DaoAuthenticationProvider的userDetailsService属性中。
<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <property name="userDetailsService" ref="userLoginServiceImpl"/> ...... </bean> <!-- 自己实现的类 --> <bean id="userLoginServiceImpl" class="org.acegi.service.impl.UserLoginServiceImpl"></bean>
3、运行说明
下载源代码,我提供了相应脚本,存放在Acegi7WebRoot\rdbms目录下。
1)、在rdbms目录下运行server.bat文件,启动hsqldb数据库。关于hsqldb的使用说明,请参考“菜鸟-手把手教你把Acegi应用到实际项目中(6)” http://zhanjia.iteye.com/blog/258282
2)、运行Acegi7项目
3)、用户名为javaee、qiuzj,密码为password
4、其他说明
开发环境:
MyEclipse 5.0GA
Eclipse3.2.1
JDK1.5.0_10
tomcat5.5.23
acegi-security-1.0.7
Spring2.0
Jar包:
acegi-security-1.0.7.jar
Spring.jar(2.0.8)
commons-codec.jar
jstl.jar (1.1)
standard.jar
commons-logging.jar(1.0)
hsqldb.jar(1.8.0.10)
- 例子源码_8_Acegi7.rar (22.1 KB)
- 下载次数: 909
评论
可以使用自己定义的***.action来处理吗??
比如:一般使用acegi 就只有后台直接登陆进行操作。
一个论坛,需要用户的注册,注册成功后才进行访问。
我看你这边的dao是自己单独写的一个JDBC的连接
如果用SPRING的连接池如何实现,谢谢
imcjw 写道
用你的方法做到这步的时候,tomcat启动出现UserLoginServiceImpl和acegi配置文件属性的userDetailsService如下类型转换异常: org.springframework.beans.TypeMismatchException: Failed to convert property value of type 找到原因了,acegi不支持org.springframework.jdbc.core.JdbcTemplate和org.springframework.orm.hibernate3方式连接数据库,改为你用的org.acegisecurity.userdetails.jdbc.JdbcDaoImpl就ok了。
解决了就好, 我也不知道你具体是怎么做的, 我的代码里面倒没有出现这样的类org.springframework.jdbc.core.JdbcTemplate
用你的方法做到这步的时候,tomcat启动出现UserLoginServiceImpl和acegi配置文件属性的userDetailsService如下类型转换异常: org.springframework.beans.TypeMismatchException: Failed to convert property value of type
找到原因了,acegi不支持org.springframework.jdbc.core.JdbcTemplate和org.springframework.orm.hibernate3方式连接数据库,改为你用的org.acegisecurity.userdetails.jdbc.JdbcDaoImpl就ok了。
用你的方法做到这步的时候,tomcat启动出现UserLoginServiceImpl和acegi配置文件属性的userDetailsService如下类型转换异常:
org.springframework.beans.TypeMismatchException: Failed to convert property value of type
我现在正在弄的一个项目,就是因为几个人分别负责不同部分??其中一位同事用了SPRING SECURITY2开发安全验证;可是我在整合项目的时候,就是想实现单点登录,别的部分都可以通过,就是到SPRING SECURITY2开发部分就是不行??研究一段时间后,用了预认证场景进行整;
在整合过程中,我尝试了两种方式,一种是直接自己生成Authentication,然后放入SecurityContext,SecurityContextHolder;经验证,结果失败。
还有一种是覆盖AbstractPreAuthenticatedProcessingFilter的setAuthenticationManager方法,然后通过getAuthenticationManager().authenticate(auth);结果显示sessionId为空,现在就是不清楚spring security中是怎么传sessionId的??楼主可以讲解下吗???
真不好意思,这方面我也不太懂,没接触过。
我也是正在学习Acegi,懂的应该比你还要少,实际应用经验也比较欠缺。
建议你在论坛上提示,这里应该有许多人可以帮上你的忙^_^。
我现在正在弄的一个项目,就是因为几个人分别负责不同部分??其中一位同事用了SPRING SECURITY2开发安全验证;可是我在整合项目的时候,就是想实现单点登录,别的部分都可以通过,就是到SPRING SECURITY2开发部分就是不行??研究一段时间后,用了预认证场景进行整;
在整合过程中,我尝试了两种方式,一种是直接自己生成Authentication,然后放入SecurityContext,SecurityContextHolder;经验证,结果失败。
还有一种是覆盖AbstractPreAuthenticatedProcessingFilter的setAuthenticationManager方法,然后通过getAuthenticationManager().authenticate(auth);结果显示sessionId为空,现在就是不清楚spring security中是怎么传sessionId的??楼主可以讲解下吗???
不用客气,大家互相进步嘛!
发表评论
-
菜鸟-手把手教你把Acegi应用到实际项目中(12)-Run-As认证服务
2008-11-25 18:00 4676有这样一些场合,系统用户必须以其他角色身份去操作某 ... -
菜鸟-手把手教你把Acegi应用到实际项目中(11)-切换用户
2008-11-15 23:48 4272在某些应用场合中,我们可能需要用到切换用户的功能, ... -
菜鸟-手把手教你把Acegi应用到实际项目中(10)-保护业务方法
2008-11-09 00:35 4507前面已经讲过关于保护Web资源的方式,其中包括直接 ... -
菜鸟-教你把Acegi应用到实际项目(9)-实现FilterInvocationDefinition
2008-11-02 11:34 7905在实际应用中 ... -
菜鸟-手把手教你把Acegi应用到实际项目中(7)-缓存用户信息
2008-10-28 21:52 4531首先讲讲EhCache ... -
菜鸟-手把手教你把Acegi应用到实际项目中(6)
2008-10-26 22:51 5969在企业应用中,用户的用户名、密码和角色等信 ... -
菜鸟-手把手教你把Acegi应用到实际项目中(5)
2008-10-25 22:00 7435在实际企业应用中,用户密码一般都会进行加密处理,这样才 ... -
菜鸟-手把手教你把Acegi应用到实际项目中(4)
2008-10-23 22:27 7682今天就讲个ConcurrentSessionFilte ... -
菜鸟-手把手教你把Acegi应用到实际项目中(3)
2008-10-20 23:04 7608这一节我们将要了解的是AnonymousPro ... -
菜鸟-手把手教你把Acegi应用到实际项目中(2)
2008-10-16 23:16 7274上一篇是基于BasicProcessingFil ... -
菜鸟-手把手教你把Acegi应用到实际项目中(1.2)
2008-10-16 02:20 77867) daoAuthenticationProvider 进 ... -
菜鸟-手把手教你把Acegi应用到实际项目中(1.1)
2008-10-16 02:13 10753相信不少朋友们对于学 ...
相关推荐
在“菜鸟-手把手教你把Acegi应用到实际项目中(3)”这篇博文中,博主可能会深入讲解如何将 Acegi 集成到实际的项目中,为读者提供一个逐步的指南。下面,我们将探讨 Acegi 的核心概念、配置以及在项目中的应用。 1. ...
本教程将引导初学者逐步了解如何在实际项目中应用Acegi安全框架,以便为你的Web应用提供强大的身份验证和授权功能。 首先,让我们理解Acegi的基础概念。Acegi的核心组件包括SecurityContext、Authentication和...
物业公司绩效考核制度
2025最新小学数学义务教育课程标准(2022年版)必考题库附含答案.docx
1、文件内容:SDL-1.2.15-17.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/SDL-1.2.15-17.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
软件研发绩效考核办法
FactoryIO液位PID仿真程序入门指南:使用TIA Portal V15与FactoryIO 2.4.0的梯形图编程,factoryio液位PID仿真程序 使用简单的梯形图编写,通俗易懂,起到抛砖引玉的作用,比较适合有动手能力的入门初学者。 软件环境: 1、西门子编程软件:TIA Portal V15(博图V15) 2、FactoryIO 2.4.0 内容清单: 1、FactoryIO中文说明书+场景模型文件 2、博图V15PLC程序(源码)。 ,核心关键词:FactoryIO液位PID仿真程序; 梯形图编写; 通俗易懂; 入门初学者; 西门子编程软件; TIA Portal V15(博图V15); FactoryIO 2.4.0; FactoryIO中文说明书; 场景模型文件; PLC程序(源码)。,"FactoryIO液位控制:梯形图PID仿真程序"
# 微信自动锁定:您的隐私保护神器在当今数字化时代,隐私安全日益重要。微信作为我们日常沟通和信息交流的重要工具,其中的隐私保护不容忽视。为了满足大家对微信隐私保护的需求,我们特别推出了“微信自动锁定”软件。 1. **自动锁定**:这是软件的核心功能。当您在使用微信的过程中,若3分钟内没有任何鼠标和键盘操作,软件会自动锁定微信。这一功能有效防止了他人在您离开电脑时,未经授权访问您的微信,保护您的聊天记录、个人信息等隐私不被泄露。 2. **便捷的托盘操作**:程序启动后,会自动收纳到电脑右下角的托盘中,不占用过多屏幕空间,也不会干扰您的正常工作和使用。当您需要退出程序时,只需右键点击托盘图标,选择“退出”即可,操作简单便捷。 3. **灵活的托盘图标设置**:托盘图标支持两种设置方式。您可以选择指定路径的图片作为托盘图标,按照自己的喜好进行个性化设置;也可以使用base64编码的图标,满足不同用户的多样化需求。
【作品名称】:基于Python 的BP神经网络的高频金融时间序列分析【毕业设计】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: This project includes three sections. GetData Data crawling. Responsible for crawling and processing the high frequency data of stock transcation in recent years. And the data format would be converted to an appropriate format. predict Core algorithm. Implement the Back Propagation Neural Networks 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。
1、文件内容:PackageKit-gtk3-module-1.1.10-2.el7.centos.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/PackageKit-gtk3-module-1.1.10-2.el7.centos.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
三相PWM整流器的双闭环控制与C语言实现的PI控制及SVPWM模块技术解析,三相PWM整流器,采用双闭环控制,用C语言实现PI控制,SVPWM等模块。 ,核心关键词:三相PWM整流器;双闭环控制;C语言实现;PI控制;SVPWM模块;,三相PWM整流器双闭环PI控制与SVPWM模块实现
反激式开关电源仿真研究:电压外环PI控制下12V输出电压及MATLAB建模分析,反激式开关电源,反激仿真电力电子仿真,电压外环PI控制,输入电压18-75V,输出电压12V,输出功率12W,MATLAB simulink软件。 ,核心关键词:反激式开关电源; 反激仿真; 电力电子仿真; 电压外环PI控制; 输入电压18-75V; 输出电压12V; 输出功率12W; MATLAB Simulink软件。,基于反激式开关电源的电力电子仿真与电压外环PI控制研究
电赛小车源码 常规C/C++编程 【核心代码】 ├── 2003智能小车(全国大学生电子设计竞赛) │ ├── BrainCar.M51 │ ├── BrainCar.Opt │ ├── BrainCar.Uv2 │ ├── BrainCar.hex │ ├── BrainCar.lnp │ ├── BrainCar.plg │ ├── BrainCar_Opt.Bak │ ├── BrainCar_Uv2.Bak │ ├── Config.h │ ├── Follow.LST │ ├── Follow.OBJ │ ├── Follow.c │ ├── Follow.h │ ├── IOCfg.LST │ ├── IOCfg.OBJ │ ├── IOCfg.c │ ├── LightDTC.LST │ ├── LightDTC.OBJ │ ├── LightDTC.c │ ├── LightDTC.h │ ├── MetalDTC.LST │ ├── MetalDTC.OBJ │ ├── Met
1、文件内容:alsa-plugins-speex-1.1.6-1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/alsa-plugins-speex-1.1.6-1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
值得借鉴的IT部门绩效考核范文
双端VSC(三阶)MMC平均值模型四阶小信号模型代码解析与阶跃验证,双端VSC(3阶) MMC平均值模型(4阶)小信号模型代码,小信号阶跃验证代码 ,核心关键词:双端VSC; 3阶; MMC平均值模型; 4阶; 小信号模型代码; 小信号阶跃验证代码;,双端VSC 3阶小信号模型代码及4阶MMC平均值阶跃验证研究
P020250120583214598713 2.et
23 采购部门KPI指标(结合BSC)
东方日升集团薪酬绩效管理办法
"基于Turbo编译码算法的通信信道编码译码仿真及logmap和Sova算法研究",Turbo编译码实现 通信专业 信道编码译码识别 接turbo码译码算法仿真 译码算法logmap sova ,核心关键词:Turbo编译码实现; 通信专业; 信道编码译码识别; Turbo码译码算法仿真; 译码算法logmap; 译码算法sova;,Turbo编译码实现与算法仿真:信道编码译码识别技术