Tôi đang cố gắng lưu dữ liệu bổ sung trong đối tượng chính của người dùng de.Bảo mật mùa xuân tùy chỉnh UserDetailsService và tùy chỉnh Lớp người dùng
Những gì tôi đã làm là:
thực hiện "UserDetails" giao diện cho lớp người dùng hiện có của tôi, nơi dữ liệu bổ sung của tôi được lưu (như địa chỉ email vv).
@Entity
public class User implements UserDetails {
Sau đó, tôi đã tạo ra một thực hiện UserDetailsService:
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
UserDAO userDAO;
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
User user = userDAO.findOneByUsername(username);
if (user == null)
throw new UsernameNotFoundException("username " + username
+ " not found");
System.out.println("---------------------> FOUND ------------->"
+ user.getEmail());
return user;
}
}
Bước cuối cùng là thêm UserDetailsService trong cấu hình an ninh của tôi.
Tôi thấy trong bảng điều khiển của mình rằng "loadUserByName" được gọi hai lần (vì đầu ra "Tìm thấy").
Khi tôi cố gắng để truy cập vào các đối tượng chính trong bộ điều khiển của tôi ->
System.out.println(SecurityContextHolder.getContext()
.getAuthentication().getPrincipal());
tôi không nhận được dữ liệu bổ sung của tôi. Khi tôi cố gắng truyền nó đến đối tượng người dùng của tôi, tôi nhận được một không thể bỏ ngoại lệ.
Tôi có thiếu gì không ??
Cảm ơn bạn trước.
Điều đó đã không thay đổi bất cứ điều gì. Btw. đoạn mã cuối cùng của bạn cho tôi: "java.lang.ClassCastException: org.springframework.security.core.userdetails.User không thể truyền tới .......... CustomUserDetails" – jvecsei
bạn có thể gỡ lỗi ứng dụng của mình và nói không lớp nào sẽ trả về 'SecurityContextHolder.getContext(). getAuthentication(). getPrincipal()'? –
lớp org.springframework.security.core.userdetails.Người dùng – jvecsei