spring-boot - 为什么 LoginModule 中的 @Autowired 返回 null?
问题描述
我用 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, Map<String, ?> 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;
}
}
解决方案
推荐阅读
- java - RabbitMQ 错误 java.lang.IllegalArgumentException:表中的值无效
- mysql - Go sqlmock 测试 MySQL 批量插入
- python - 如何对多架构的python文件进行cythonize?
- podman - 错误:提供的配置无效:无法为无根容器和 Pod 分配静态 MAC 地址
- entity-framework - 从我的应用程序的任何地方了解当前用户 ID
- django - 当我尝试使用 env 变量连接数据库时,我得到 [用户“root”的密码验证失败] Django
- mssql-jdbc - 从 Eclipse Scout 中的 MSSQL 存储过程返回值
- go - GoLang Protobuf:如何使用同一个 tcp 连接发送多条消息?
- docker - 在 Visual Studio 中调试在 Docker 中运行的应用程序
- ios - Apple 开发证书在钥匙串中不受信任