验证用户的常用方法是调用:
SecurityUtils.subject.login(new UsernamePasswordToken(params.username,params.password))
但是,如果我想自动登录他,而不必输入用户名和密码怎么办?我在userService中创建了这样的方法:
def logIn(User user){
Object userIdentity = user.email
String realmName = "ShiroDbRealm";
PrincipalCollection principals = new SimplePrincipalCollection(userIdentity, realmName);
Subject subject = new Subject.Builder().principals(principals).buildSubject();
ThreadContext.bind(subject)
}
但这不起作用,有什么提示吗?
答案 0 :(得分:0)
我设法解决了这个问题。我创建了自己的类来实现AuthenticationToken接口:
class UsernameToken implements AuthenticationToken{
private username;
public UsernameToken(String username) {
this.username = username;
}
public String getPrincipal() {
return username;
}
public String getCredentials() {
return username;
}
}
并创建了新的Realm,它与默认的Realm完全相同但没有密码验证。现在我可以使用
SecurityUtils.subject.login(new UsernameToken(user.username))