У меня есть приложение, настроенное с помощью Spring Security.
Все также работает.
UserDetailService:
@Service(value = "userDetail")
public class UserDetailServiceImpl implements UserDetailsService, Serializable {
private static final long serialVersionUID = 3487495895819392L;
@Autowired
private IUserDetailRepository iUserDetailRepository;
@Autowired
private IUserRoleRepository iUserRoleRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = iUserDetailRepository.loadUserByUsername(username);
List<UserRole> roles = iUserRoleRepository.getAllRoleByUserName(username);
UserDetails u = new UserDetails() {
@Override
public boolean isEnabled() {
// return user.getEnable();
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public String getUsername() {
// return user.getUsername();
return "reyhane";
}
@Override
public String getPassword() {
// return user.getPassword();
return "reyhane";
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Collection<GrantedAuthority> authorities = new ArrayList<>();
SimpleGrantedAuthority authority = new SimpleGrantedAuthority("ADMIN");
authorities.add(authority);
return authorities;
}
};
return u;
}
}
После этого я был вынужден настроить сеанс Spring по этой конфигурации для сохранения контекста безопасности Spring в Redis.
В UserDetailService существует проблема.
UserDetailService имеет два автоматически подключенных файла, как показано выше:
@Autowired
private IUserDetailRepository iUserDetailRepository;
@Autowired
private IUserRoleRepository iUserRoleRepository;
Эти два автоматически подключаемых поля предназначены для получения информации о пользователях и ролях пользователей из БД.
Интересно, что, когда я комментирую эти два автоматически подключаемых поля следующим образом:
//@Autowired
private IUserDetailRepository iUserDetailRepository;
//@Autowired
private IUserRoleRepository iUserRoleRepository;
и заполните вручную пользователя и роль пользователя. Сеанс Spring также работает, но когда эти два @Autowired
существуют в классе, возникает следующее исключение:
Вызвано: org.springframework.core.serializer.support.SerializationFailedException: не удалось сериализовать объект с помощью DefaultSerializer; вложенным исключением является java.io.NotSerializableException: org.springframework.dao.support.PersistenceExceptionTranslationInterceptor в org.springframework.core.serializer.support.SerializingConverter.convert(SerializingConverter.java:68) ~[spring-core-4.3.2.RELEASE .jar:4.3.2.RELEASE] в org.springframework.core.serializer.support.SerializingConverter.convert(SerializingConverter.java:35) ~[spring-core-4.3.2.RELEASE.jar:4.3.2.RELEASE] at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.serialize(JdkSerializationRedisSerializer.java:90) ~[spring-data-redis-1.7.2.RELEASE.jar:na] ... 35 общих кадров пропущено Причина: java .io.NotSerializableException: org.springframework.dao.support.PersistenceExceptionTranslationInterceptor в java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) ~[na:1.8.0_111] в java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java: 1548) ~[на:1.8.0_111]
Все знают, что происходит?
Я не понимаю, что происходит.
Я не знаю, какой ключ для поиска в гугле
Я хочу знать, что происходит между весенней сессией и Spring Security и как ее решить.
Спасибо за помощь
User
вместо новогоUserDetails
, и вам не нужны никакие хаки. - person M. Deinum   schedule 08.06.2017