我对如何在会话中获取用户名存在疑问。我正在使用Spring Security 4.2
我有我的班级Usuario
@Entity
@Data
public class Usuario {
@Id @GeneratedValue
private Integer id;
private String login;
private String senha;
private String papel;
}
我的班级UsuarioController
@Named
@ViewScoped
public class UsuarioController {
@Autowired
private UsuarioRepository usuarioRepository;
@Getter @Setter
private List<Usuario> usuarios;
@Getter @Setter
private Usuario usuario = new Usuario();
}
我的类SecurityConfig扮演了过滤器的角色,已经内置于Spring Security中。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UsuarioRepository usuarioRepository;
@Override
protected void configure(HttpSecurity http) {
try {
http.csrf().disable();
http
.userDetailsService(userDetailsService())
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/cliente.jsf").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login.jsf")
.permitAll()
.failureUrl("/login.jsf?error=true")
.defaultSuccessUrl("/cliente.jsf")
.and()
.logout()
.logoutSuccessUrl("/login.jsf");
}
catch (Exception ex) {
throw new RuntimeException(ex);
}
}
@Override
protected UserDetailsService userDetailsService() {
List<Usuario> usuarios = usuarioRepository.findAll();
List<UserDetails> users = new ArrayList<>();
for(Usuario u: usuarios){
UserDetails user = new User(u.getLogin(), u.getSenha(), AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_"+u.getPapel()));
users.add(user);
} return new InMemoryUserDetailsManager(users);
}
}
我已经在论坛中研究过其他帖子,没有帮助,有什么提示吗?我需要创建另一个类吗?
答案 0 :(得分:0)
如果要获取使用Spring Security进行身份验证的当前用户的用户名,可以使用以下命令:
final String currentUserName = SecurityContextHolder.getContext().getAuthentication().getName();
在这里,我们找到当前的Authentication
并查询用户名。对于基于密码的验证,getName()
返回用户的登录信息。
答案 1 :(得分:0)
您可以像这样创建自己的SecurityUtility
类:
public final class SecurityUtils {
private SecurityUtils() {
}
public static String getUserName() {
SecurityContext securityContext = SecurityContextHolder.getContext();
Authentication authentication = securityContext.getAuthentication();
String userName = null;
if (authentication != null) {
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
userName = userDetails.getUsername();
}
return userName;
}
并从您需要用户名的班级中调用它,例如:SecurityUtils.getCurrentUserLogin();