刚接触Security,在做和SpringBoot集成的时候写了一个Demo,发现了一个问题,就是登录时候页面也没有报错,也没有跳转,打开浏览器控制台发现,在login请求的时候返回的是302.
经过一番查找,我本人出现的原因是我的User实体类,实体类在实现UserDetails接口的时候实现了四个布尔类型的方法,默认为false,这里要全部改成true. 然后getUsername和getPassword方法检查一下有没有return false;贴下我的代码。
package com.wisely.ch9_1.domain;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
@Entity
public class SysUser implements UserDetails { //让我们的用户实体实现UserDetails接口,我们的用户实体即为Spring Security所使用的用户。
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;
private String username;
private String password;
@ManyToMany(cascade= {CascadeType.REFRESH},fetch= FetchType.EAGER) //配置用户和角色的多对多关系。
private List<SysRole> roles;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> auths = new ArrayList<GrantedAuthority>(); //重写getAuthorities方法,将用户的角色作为权限。
List<SysRole> roles = this.getRoles();
for(SysRole role:roles) {
auths.add(new SimpleGrantedAuthority(role.getName()));
}
return auths;
}
@Override
public boolean isAccountNonExpired() { //自动继承的四个bool方法要true,
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isAccountNonLocked() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isCredentialsNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isEnabled() {
// TODO Auto-generated method stub
return true;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public List<SysRole> getRoles() {
return roles;
}
public void setRoles(List<SysRole> roles) {
this.roles = roles;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String getPassword() {
// TODO Auto-generated method stub
return password;
}
@Override
public String getUsername() {
// TODO Auto-generated method stub
return username;
}
}