【发布时间】:2014-12-07 10:29:23
【问题描述】:
我正在尝试学习 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,但这让我觉得我必须在我的安全配置中更改很多东西
编辑:
这是我的 SecurityUser
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
【问题讨论】:
-
你的 principal/UserDetails 类是什么样子的?
-
你好@holmis83 看看编辑,这是你想看的吗?谢谢你的帮助
标签: java spring-mvc tomcat spring-security