springside4 shiro LazyInitializationException
< 返回列表时间: 2014-07-03来源:开源中国
HDC调试需求开发(15万预算),能者速来!>>>
在移植springside4后shiro验证权限时一只报 LazyInitializationException错误。 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.demo.bussiness.entity.User.roleList, could not initialize proxy - no Session org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:575) org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:214) org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:554) org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:142) org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:294) com.demo.bussiness.security.shiro.ShiroDbRealm.doGetAuthorizationInfo(ShiroDbRealm.java:84) org.apache.shiro.realm.AuthorizingRealm.getAuthorizationInfo(AuthorizingRealm.java:341) org.apache.shiro.realm.AuthorizingRealm.hasRole(AuthorizingRealm.java:571) org.apache.shiro.authz.ModularRealmAuthorizer.hasRole(ModularRealmAuthorizer.java:374) org.apache.shiro.authz.ModularRealmAuthorizer.hasAllRoles(ModularRealmAuthorizer.java:407) org.apache.shiro.mgt.AuthorizingSecurityManager.hasAllRoles(AuthorizingSecurityManager.java:161) org.apache.shiro.subject.support.DelegatingSubject.hasAllRoles(DelegatingSubject.java:236) org.apache.shiro.web.filter.authz.RolesAuthorizationFilter.isAccessAllowed(RolesAuthorizationFilter.java:52) org.apache.shiro.web.filter.AccessControlFilter.onPreHandle(AccessControlFilter.java:162) org.apache.shiro.web.filter.PathMatchingFilter.isFilterChainContinued(PathMatchingFilter.java:203) org.apache.shiro.web.filter.PathMatchingFilter.preHandle(PathMatchingFilter.java:178) org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:131) org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344) org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter 这个也已经加上了。
@Entity @Table(name = "t_user") public class User extends IdEntity { private String username; private String password; private String salt; private List<Role> roleList = new ArrayList<Role>(); public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSalt() { return salt; } public void setSalt(String salt) { this.salt = salt; } @ManyToMany @JoinTable(name = "t_user_role", joinColumns = {@JoinColumn(name = "user_id")}, inverseJoinColumns = {@JoinColumn(name = "role_id")}) @Fetch(FetchMode.SUBSELECT) @OrderBy("id asc") public List<Role> getRoleList() { return roleList; } public void setRoleList(List<Role> roleList) { this.roleList = roleList; } } @Entity @Table(name = "t_role") public class Role extends IdEntity { private String name; private String permissions; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPermissions() { return permissions; } public void setPermissions(String permissions) { this.permissions = permissions; } @Transient public List<String> getPermissionList() { String[] ps = StringUtils.split(this.permissions, ","); return Arrays.asList(ps); } } <!-- Open Entity Manager in View filter --> <filter> <filter-name>openEntityManagerInViewFilter</filter-name> <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>openEntityManagerInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
基本上都是按照springside上写的,有没有碰到这问题的呀,搞了好久也不知道哪里出的问题。
@Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { ShiroUser shiroUser = (ShiroUser) principals.getPrimaryPrincipal(); User user = accountService.queryByUsername(shiroUser.username); SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); for (Role role : user.getRoleList()) { // 基于Role的权限信息 info.addRole(role.getName()); // 基于Permission的权限信息 info.addStringPermissions(role.getPermissionList()); } return info; }





热门排行