среда разработки
springboot-2.0.3, Сиро-1,4, 开启 springboot-DevTools
должное
Пользовательская область разработки Сиро, генерируется исключением преобразования объекта
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principal) {
User user = (User) SecurityUtils.getSubject().getPrincipal();
String userName = user.getUsername();
SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
// 获取用户角色集
List<Role> roleList = this.roleService.findUserRole(userName);
Set<String> roleSet = roleList.stream().map(Role::getRoleName).collect(Collectors.toSet());
simpleAuthorizationInfo.setRoles(roleSet);
// 获取用户权限集
List<Menu> permissionList = this.menuService.findUserPermissions(userName);
Set<String> permissionSet = permissionList.stream().map(Menu::getPerms).collect(Collectors.toSet());
simpleAuthorizationInfo.setStringPermissions(permissionSet);
return simpleAuthorizationInfo;
}
复制代码
В котором пользователь Пользователь = (Пользователь) SecurityUtils.getSubject () getPrincipal () ;. Выдает следующее исключение
exception:java.lang.ClassCastException:cn.system.model.User cannot be cast to cn.system.model.User,
复制代码
Cause Analysis
Когда проект начал загрузку проекта между загрузчиком класса, используемым быть org.springframework.boot.devtools.restart.classloader.RestartClassLoader, потому что перед введением пружинного загрузочного-Devtools этого горячего пакета развертывания, в котором проект по повышению эффективности , И я беру объекты Shiro сессии, когда загрузчик классов не привык к этому, но sun.misc.Launcher.AppClassLoader, что приводит к ненормальному конвертировать мой тип.
Решения
- Не используйте пружинный Boot-DevTools горячего развертывания
- Создание каталога в следующей папке ресурсов META_INF, а затем создать spring-devtools.properties файлов, а также похожий на следующую конфигурацию:
restart.exclude.companycommonlibs=/mycorp-common-[\\w-]+\.jar
restart.include.projectcommon=/mycorp-myproj-[\\w-]+\.jar
复制代码
- Чтобы удалить свойство объекта копии, следующим образом:
public static Subject getSubjct() {
return SecurityUtils.getSubject();
}
public static User getUser() {
User user = null;
Object obj = getSubjct().getPrincipal();
if (StringUtils.isNotNull(obj)) {
user = new User();
BeanUtils.copyBeanProp(user, obj);
}
return user;
}
复制代码