gpt4 book ai didi

java - tomcat重启后基于spring security java的配置

转载 作者:行者123 更新时间:2023-11-28 22:42:21 24 4
gpt4 key购买 nike

我正在尝试学习 spring,但我的安全用户在 spring-security 方面遇到了问题。重新启动 tomcat 后,当我使用

时,它会将我当前登录的用户保留为空
<security:authentication property="principal.username"/>

标签。

我的 spring-security 配置很简单

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
private CustomUserDetailsService customUserDetailsService;

@Override
protected void configure(AuthenticationManagerBuilder registry)throws Exception{
Md5PasswordEncoder e = new Md5PasswordEncoder();
registry.userDetailsService(customUserDetailsService).passwordEncoder(e);
}

@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/resources/**").permitAll()
.antMatchers("/webjars/**").permitAll()
.antMatchers("/admin/**").hasAuthority("ADMIN")
.anyRequest().authenticated()
.and().formLogin().loginPage("/login").permitAll()
.and().logout().permitAll();
}
}


我看过this ,但这让我觉得我必须在我的安全配置中更改很多东西
编辑:
这是我的安全用户

public class SecurityUser extends Usuario implements UserDetails {

private static final long serialVersionUID = 1L;

public SecurityUser(Usuario usuario) {
this.setEliminado(usuario.isEliminado());
this.setFechaCreacion(usuario.getFechaCreacion());
this.setPassword(usuario.getPassword());
this.setRoles(usuario.getRoles());
this.setUltimaModificacion(usuario.getUltimaModificacion());
this.setUsername(usuario.getUsername());
}

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
Set<Rol> userRoles = this.getRoles();
if (userRoles != null) {
for (Rol role : userRoles) {
SimpleGrantedAuthority authority = new SimpleGrantedAuthority(role.getDescripcion());
authorities.add(authority);
}
}
return authorities;
}

@Override
public String getPassword(){
return super.getPassword();
}

@Override
public String getUsername(){
return super.getUsername();
}

@Override
public boolean isAccountNonExpired() {
return true;
}

@Override
public boolean isAccountNonLocked() {
return true;
}

@Override
public boolean isCredentialsNonExpired() {
return true;
}

@Override
public boolean isEnabled() {
return true;
}

}


这是我的 UserServiceDetalis:

@Component
public class CustomUserDetailsService implements UserDetailsService{
@Autowired
private UsuarioRepository usuarioService;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Usuario u = usuarioService.findByUsername(username);
if(u==null)
throw new UsernameNotFoundException("No se ha encontrado el usuario "+username);
return new SecurityUser(u);
}

}

我使用的是基于 java 的配置,所以我没有 web.xml 文件。
有什么想看的,告诉我,我发上来

感谢您的帮助!!!
PD:对不起我的英语 :P

最佳答案

您的 Usuario 类不包括在内,但我猜测它没有实现 java.io.Serializable。当 Tomcat 重新启动时, session 被序列化以存储在磁盘上。默认情况下,只有实现了 Serializable 的类中的字段才会被写入(即使子类实现了 Serializable)。所以你的类声明应该是这样的:

public class Usuario implements Serializable

还要确保您的用户名字段标记为transient

关于java - tomcat重启后基于spring security java的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26330148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com