首页 > 解决方案 > 为什么 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;
        }
    
    
    }

标签: spring-bootjaas

解决方案


推荐阅读