簡體   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