问题描述
我用 JAAS 做 Spring Security。但是 @Autowired 返回 null
package com.example.LabOneBusinessLogic.config.Security.Jaas;
import com.example.LabOneBusinessLogic.config.Security.jwt.JwtProvider;
import com.example.LabOneBusinessLogic.entity.Users;
import com.example.LabOneBusinessLogic.service.UserService;;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.security.auth.Subject;
import javax.security.auth.callback.*;
import javax.security.auth.login.LoginException;
import javax.security.auth.spi.LoginModule;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class JaasLoginModule implements LoginModule
{
private CallbackHandler handler;
private Subject subject;
private String login;
private List<String> userGroups;
@Autowired
private JwtProvider jwtProvider;
@Autowired
private UserService userService;
public void initialize(Subject subject,CallbackHandler callbackHandler,Map<String,?> sharedState,?> options)
{
handler = callbackHandler;
this.subject = subject;
}
@Override
public boolean login() throws LoginException {
Callback[] callbacks = new Callback[2];
callbacks[0] = new NameCallback("username");
callbacks[1] = new PasswordCallback("password",true);
try {
handler.handle(callbacks);
String name = ((NameCallback) callbacks[0]).getName();
String password = String.valueOf(((PasswordCallback) callbacks[1]).getpassword());
String userLogin = jwtProvider.getLoginFromToken(password);
Users userEntity = userService.findByLogin(userLogin);
if (userEntity!=null) {
userGroups = new ArrayList<String>();
userGroups.add("USER");
return true;
}
} catch (Exception e) {
return false;
}
return false;
}
@Override
public boolean commit() throws LoginException {
if (userGroups != null && userGroups.size() > 0) {
for (String groupName : userGroups) {
subject.getPrincipals().add(new JaasPrincipal(groupName));
}
}
return true;
}
@Override
public boolean abort() throws LoginException {
return false;
}
@Override
public boolean logout() throws LoginException {
subject.getPrincipals().clear();
return true;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)