spring-security与Hibernate-Session冲突
来源:互联网 发布:淘宝坏单包赔怎么设置 编辑:程序博客网 时间:2024/06/05 14:10
记录:
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
Employee employee = employeeService.getEmployeeByLoginname(username);
if (employee == null) {
throw new UsernameNotFoundException("用户不存在,或密码错误!");
}
String password = employee.getLoginpassword();
boolean enabled = employee.isLoginAllow();
Set<Role> roles = employee.getRoleSet(); //②
List<GrantedAuthority> anthoritieList = new ArrayList<GrantedAuthority>();
for (Role role : roles) {
Set<Authority> authorities = role.getAuthoritySet(); //①
for (Authority authority : authorities) {
anthoritieList.add(new GrantedAuthorityImpl(authority.getName()));
}
}
return new User(username, password, enabled, anthoritieList
.toArray(new GrantedAuthority[0]));
}
①部分很重要,执行到此的时候,我的程序报懒加载异常:说 session已经被关闭了。
我的session用的是OpenSessionView。
也就是说sesion是在请求到来时打开,页面加载完毕后关闭。
可是在执行到此的时候,居然告诉我 session已经被关闭了。
那么说明:OpenSessionView的session管理,到不了 spring-security中。
解释可能是:
spring-security跳过了spring管理。因为它的登陆过程,其实是个黑盒。
因此,要记得给role.getAuthoritySet()属性设置lazy="false" ,也就是Role的映射文件的<set>标签,设置lazy="false"。
另:
观察②处在映射文件的映射,是:
<set name="roleSet" lazy="false" table="EMS_EMPLOYEE_ROLE_TABLE" order-by="EMPLOYEE_ID" fetch="subselect">
<key column="EMPLOYEE_ID"/>
<many-to-many column="ROLE_ID" class="Role"/>
</set>
很明显的看到 它设置了 lazy="false"
如果拿掉这个属性 同样在②也会报错
结论:spring-security流程中不能出现懒加载对象。因为session已经关闭。因此,要为默认栏架载的对象设置lazy="false".
但这不是最佳解决方案。因为,这会影响其它地方的运行效率。最好,将这一过程,后置到Service或者DAO里面。或者将session注入到流程里。
- spring-security与Hibernate-Session冲突
- hibernate&spring事务管理和session管理的冲突
- spring与hibernate,struts的冲突问题
- spring-security+spring-session配置
- Spring与Hibernate集成中的session问题
- Spring与Hibernate集成中的session问题
- Spring与Hibernate集成中的session问题
- Spring与Hibernate集成中的session问题
- Spring与Hibernate集成中的Session问题
- spring security session expired issue
- 13. Spring Security session管理
- spring与hibernate,struts的冲突问题(网摘)
- 关于spring与hibernate整合,导入包的冲突
- Spring Security搭配hibernate,Mysql
- Spring Security + Hibernate XML Example
- Spring Security + Hibernate Annotation Example
- Spring security +Hibernate+UserDetailsService认证
- 解决spring-security-oauth2 导入包冲突
- 关于嵌入式方向(同济大学软件学院院长谈择业)
- C语言C#参数对照表
- 《DOS命令行关机命令----shutdown大全》
- 使用jsp+JavaBean简单实现计算器
- Android动画开发——Animation动画效果
- spring-security与Hibernate-Session冲突
- SVN常用命令
- 从一个字符串中删除另一个字符串中出现的字符
- TStringList .
- zookeeper锁机制
- 遍历树查找 . 最简单的遍历树算法 .
- ping .
- Oracle forupdate 引起的行锁解决办法
- Java反编译源代码分析