- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的网络项目中使用 SpringSecurity。当我尝试使用用户名和密码登录时,堆栈跟踪中出现此错误:
class org.springframework.security.core.userdetails.User cannot be cast to class com.cesi.cuberil.service.JwtUser (org.springframework.security.core.userdetails.User and com.cesi.cuberil.service.JwtUser are in unnamed module of loader 'app')
at com.cesi.cuberil.controller.AuthController.login(AuthController.java:116) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.2.jar:5.3.2]
下面,我将在我认为问题出处的地方放置类。这是我的 JwtUser.java :
package com.cesi.cuberil.service;
import com.cesi.cuberil.model.User;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Collection;
@Data
public class JwtUser implements UserDetails {
private final String username;
private final String password;
private final boolean enabled;
private final Collection<? extends GrantedAuthority> authorities;
private static final long serialVersionUID = 1L;
private User user;
public JwtUser(String username, String password, Boolean enabled, Collection<? extends GrantedAuthority> authorities) {
this.username = username;
this.password = password;
this.enabled = enabled;
this.authorities = authorities;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return authorities;
}
@Override
public String getPassword() {
return password;
}
@Override
public String getUsername() {
return username;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return enabled;
}
}
这是我的 AuthController.java :
@RestController
@RequestMapping("/api/v1/auth")
@AllArgsConstructor
public class AuthController {
@Autowired
AuthenticationManager authenticationManager;
@Autowired
PasswordEncoder encoder;
@Autowired
JwtUtils jwtUtils;
@PostMapping("/login")
public ResponseEntity<?> login(@Valid @RequestBody LoginRequest loginRequest) {
Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(loginRequest.getUsername(), loginRequest.getPassword()));
SecurityContextHolder.getContext().setAuthentication(authentication);
String jwt = jwtUtils.generateJwtToken(authentication);
JwtUser myUserDetails = (JwtUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
List<String> roles = myUserDetails.getAuthorities().stream()
.map(item -> item.getAuthority())
.collect(Collectors.toList());
return ResponseEntity.ok(new JwtResponse(jwt, myUserDetails.getUser().getUserId(), myUserDetails.getUsername(), myUserDetails.getUser().getEmail(), roles));
}
}
这是我的 UserDetailsServiceImpl.java :
@Service
@AllArgsConstructor
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserRepository userRepository;
public User getByUsername(String username) {
return userRepository.findByUsername(username);
}
@Override
@Transactional(readOnly = true)
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = this.getByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("user not found");
} else {
List<GrantedAuthority> listAuthorities = new ArrayList<GrantedAuthority>();
listAuthorities.add(new SimpleGrantedAuthority("ROLE_USER"));
return new org.springframework.security.core.userdetails.User(username, user.getPassword(), true, true, true, true, listAuthorities);
}
}
}
有关信息,我使用 java 11 和最新版本的 Spring Boot。
最佳答案
我认为您应该返回 JwtUser
实例而不是 org.springframework.security.core.userdetails.User
。因为 JwtUser
已经实现了 UserDetails
接口(interface)。
Here's一个样本。
关于java - 类 org.springframework.security.core.userdetails.User 不能投,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65659155/
我正在尝试获取 session 数据,在 Service-GlobalServiceService 的 GetSessionData() 方法和我的 Component-HeaderComponent
Spring Security 有一个代表经过身份验证的用户的基类(org.springframework.security.core.userdetails.User): Models core u
我在应用程序中添加用户时遇到问题,放上代码。 //This is the SpringSecurityConfig class @Configuration public class SpringSe
我正在从用户创建 X-Auth-Token。但是,当我尝试从生成的 token 中检索用户时,它给了我一个异常 Warning: StandardWrapperValve[com.security
我有一个项目使用 spring boot,spring security 和 oauth2。当我使用 SecurityContextHolder.getContext().getAuthenticat
我已经看到,如果我想在 Spring Security 中激活并发控制,我必须添加: 到applicationContext并且: org.springframewor
我在 spring-boot 应用程序中使用 LDAP 身份验证(基于注释的配置)。我想自定义 UserDetails 对象。默认 UserDetails 实现是 LdapUserDetailsImp
如何通过将ManualUserDetails扩展org.springframework.security.core.userdetails.UserDetails添加到SecurityContextH
我需要保存一些有关用户的附加信息以排除过多的数据库请求。据我了解,我必须: 1)重写UserDetails接口(interface)。在此实现中保存我需要的所有附加信息。 2)重写UserDetail
我需要使用对象列表进行访问控制。获取该列表的查询非常复杂且冗长,因此当用户通过服务器进行身份验证时,我想将其缓存在用户对象中。我决定尝试通过 UserDetailService 和 WebSecuri
Spring Boot 应用程序具有自定义的 UserDetails。当应用程序所做的只是使用 User 类从数据库中验证现有用户时,一切正常。但是,当我尝试进行更改以便人们可以通过应用程序 GUI
我是 Spring Security 的新手。我已经实现了 UserDetails 来创建我自己的用户。我也有我的自定义 userDetailsService。现在一切正常,但我需要在不登录的情况
我正在使用 Grails 1.3.7。我有一个自定义 UserDetails在我的 customUserDetailsService 中创建的对象在认证过程中。我假设这个自定义 UserDetails
我有一个 Spring 项目,我正在将当前的身份验证转换为使用 SAML2。 就身份验证而言,我已经完成了所有工作,但是我很难让 SAML2 扩展将我的自定义 UserDetails 对象插入到 Sp
在我的 Web 应用程序中,我使用 Spring Security 和 UserDetailsService 实现进行身份验证。 现在我需要获取当前 session 的客户端 IP 地址并将其存储
我想向 userdetails 添加其他信息,例如用户的 IP 地址。有什么办法可以做到这一点?我试图创建一个新的 CustomSpringUser 类,但问题是我如何从 Authentication
我尝试使用 OAuth2 保护我的 Spring Boot 应用程序。在某些方面,一切正常。当我尝试从 oauth/token 获取访问 token 时端点第一次尝试我得到 token 没有问题。当我
我原以为我的授权实现已完成,但在尝试检索 UserDetails 对象时,我得到的只是用户名。 我正在使用具有以下细节的 oauth。 配置 AuthenticationManager: @Overr
我在我的网络项目中使用 SpringSecurity。我有保存在数据库中的实体用户。我需要使用用户 ID 在 BD 中执行请求,以从该 BD 中的其他表获取任何信息。在 Spring Security
我使用 LocalContainerEntityManagerFactoryBean 来设置 JPA EntityManagerFactory。在我使用 setPackagesToScan 扫描的扫描
我是一名优秀的程序员,十分优秀!