解释这段代码 public static User getSubject() { User user = (User) SecurityUtils.getSubject().getPrincipal(); // 初始化延迟加载的部门信息 if (user != null && !Hibernate.isInitialized(user.getDept())) { try { Hibernate.initialize(user.getDept()); } catch (LazyInitializationException e) { UserService userService = SpringContextUtil.getBean(UserService.class); User reload = userService.getById(user.getId()); Hibernate.initialize(reload.getDept()); BeanUtils.copyProperties(reload, user, "roles"); } } return user; }
时间: 2024-02-15 12:29:04 浏览: 93
Spring Boot整合Shiro搭建权限管理系统教学提纲.docx
这段代码是一个静态方法,返回一个 User 对象,表示当前登录用户。这里使用了 Shiro 框架的 SecurityUtils 工具类获取当前登录用户的信息,其中 getPrincipal() 方法返回的是 Object 类型,需要强制类型转换成 User 类型。接下来,代码对用户的部门信息进行处理。如果用户不为 null,而且用户的部门信息是延迟加载的,那么就使用 Hibernate.initialize() 方法将其初始化。如果在初始化部门信息时发生了 LazyInitializationException 异常,说明该用户的部门信息没有被正确加载,那么就需要重新查询用户信息并初始化部门信息,最后将查询出的用户信息复制到原来的用户对象中(排除 roles 属性)。最终返回处理后的用户对象。
阅读全文