如何更改下面的代码以成功将XSRF标记的新值填充到Spring MVC控制器中的变量中?
下面的当前代码抛出空指针错误。 java.lang.NullPointerException: null at demo.TwoFactorAuthenticationController.auth(TwoFactorAuthenticationController.java:44)
,它指向以下代码中的sessionToken.getToken()
声明:
以下是控制器的相关部分:
@Controller
@RequestMapping(TwoFactorAuthenticationController.PATH)
public class TwoFactorAuthenticationController {
private static final Logger LOG = LoggerFactory.getLogger(TwoFactorAuthenticationController.class);
public static final String PATH = "/secure/two_factor_authentication";
public static final String ROLE_TWO_FACTOR_AUTHENTICATED = "ROLE_TWO_FACTOR_AUTHENTICATED";
public static final String DEFAULT_CSRF_TOKEN_ATTR_NAME = HttpSessionCsrfTokenRepository.class.getName().concat(".CSRF_TOKEN");//test
@RequestMapping(method = RequestMethod.GET)
public String auth(HttpServletRequest request, HttpSession session, HttpServletResponse resp/*, ....*/) {
CsrfToken sessionToken = (CsrfToken) request.getSession().getAttribute(DEFAULT_CSRF_TOKEN_ATTR_NAME);
System.out.println(sessionToken.getToken());
resp.addCookie(new Cookie("XSRF-TOKEN", sessionToken.getToken()));
return "pinCode"; // Show the form to enter the 2FA secret
}
return "pinCode";
}
//other stuff
}
我需要在控制器中获取Session XSRF令牌的原因是/oauth/authorize
端点只是在重定向到此GET /secure/two_factor_authentication
控制器方法之前在服务器上重新设置XSRF令牌。因此,XSRF的浏览器版本与控制流程中此简短点的服务器版本不同。 换句话说,此时控制流中的request
xsrf token is different from the session
xsrf`令牌。我想从控制器cookie重新设置浏览器版本,以便避免在后续步骤中使用无效的XSRF证书。我想在服务器端控制器中重新设置,而不是依靠每个客户端来实现自己的新cookie的GET。
那么如何更改上面的代码才能在控制器中成功获取新的会话xsrf令牌?