繁体   English   中英

自动装配注释在AuthenticationSuccessHandler中返回null

[英]Autowired annotation returns null in AuthenticationSuccessHandler

在我的Spring Security应用程序中,我尝试成功登录后返回cookie'remember_token'。 我的AuthenticanSuccessHandler类自动连接RememberMeService类,以从数据库获取“令牌”值。 但是自动装配的引用RememberMeService返回null。 我确实为该类提到了@Component批注,但是它没有改变结果。 链接到完整的源代码

FormAuthenticationSuccessHandler

package com.fastcheck.timesheet.common.security;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.stereotype.Component;

import com.fastcheck.timesheet.common.services.RememberMeService;


@Component
public class FormAuthenticationSuccessHandler implements AuthenticationSuccessHandler
{
    @Autowired
    public RememberMeService rememberMeService;

@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
        Authentication authentication) throws IOException, ServletException
{

    String username;
    Object principal = authentication.getPrincipal();
    if (principal instanceof UserDetails) 
        {
            username = ((UserDetails)principal).getUsername();
        } 
        else 
        {
            username = principal.toString();

        }

    System.out.println("rememberMeService :"+rememberMeService);
    if(rememberMeService != null)
        {
            Cookie cookie=new Cookie("remember_token",rememberMeService.getRememberMeToken(username));
            cookie.setMaxAge(200);
            response.addCookie(cookie);
        }


    response.setStatus(200);
    response.sendRedirect("home");


}

}

从您的代码中我了解到的是,您正在尝试实现创建弹簧安全性以为您开箱即用的功能。

如果您正确地实现了Spring Security,我不明白为什么在您尝试进行成功身份验证后,“记住我”令牌不会自动存储在用户的浏览器中。

记住令牌自动发送到浏览器。 您无需单独发送。 是否可以提供浏览器返回的cookie值? 否则,请使用以下脚本对其进行解码。

String cookieAsPlainText = new String(Base64.decode(cookies[i].getValue());

cookieAsPlainText作为纯值应为series:令牌格式。 请让我知道这可不可以帮你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM