Spring-Security密码编码器返回null。

8 浏览
0 Comments

Spring-Security密码编码器返回null。

我在我的Struts2应用程序上实现了Spring安全性,并且它完美运作,但是它在第3行上遇到了java.lang.NullPointerException错误。

尽管看起来passwordEncoder配置起作用了,因为我不能再使用纯文本密码登录了。

  
        
           
            
         
     
    
        
    

MyClass.java

    import org.springframework.security.authentication.encoding.ShaPasswordEncoder;;
    ....
    private ShaPasswordEncoder passwordEncoder;
     public ShaPasswordEncoder getPasswordEncoder() {
         return passwordEncoder;
     }
     @Autowired
     public void setPasswordEncoder(ShaPasswordEncoder passwordEncoder) {
           this.passwordEncoder = passwordEncoder;
      }
     public void encode(String username)
        {
1             System.err.println("encode password");
2             String encodedPassword = "";
3             encodedPassword = passwordEncoder.encodePassword("Jack",username);
4             System.err.println("encoded password " + encodedPassword);
        }

pom.xml

   
            org.springframework
            spring-webmvc
            3.1.1.RELEASE
        
        
            org.springframework.security
            spring-security-web
            3.1.1.RELEASE
        
        
            org.springframework.security
            spring-security-core
            3.1.1.RELEASE
        
        
            org.springframework.security
            spring-security-taglibs
            3.1.1.RELEASE
        
        
            org.springframework.security
            spring-security-config
            3.1.1.RELEASE
        

admin 更改状态以发布 2023年5月22日
0
0 Comments

@Autowired只适用于Spring管理的Bean。因此,您的MyClass应该是@Service@Repository@Component等(或仅在XML中配置为)。

另外,我不明白你的意思

我无法再使用明文密码登录。

用户输入的密码编码和与数据库中编码的密码进行比较是由Spring安全内部完成的。它只需要一个UserDetails对象,该对象将由您的jdbc-user-service提供。

0
0 Comments

你是否实际上将编码器注入到Encode.java中的某个地方?如果没有,那么这就是你的问题。

如果需要一个快速而简单的解决方案,可能会起作用。只需将其设置为

 private ShaPasswordEncoder passwordEncoder=new ShaPasswordEncoder(256);

然后找出您注入时出错的原因。

可以阅读此内容,了解应该如何进行注入。

Spring框架中@Inject和@Autowired之间有什么区别?在何种情况下使用哪个?

0