2

用户注册成功后,我试图将用户重定向到登录页面后并尝试从 SecurityContextHolder.getContext().getAuthentication(); 这是返回null。

这是用户成功注册后我设置上下文的方式

 UsernamePasswordAuthenticationToken authenticatedUser = new UsernamePasswordAuthenticationToken(userDetails.getUsername(), userDetails.getPassword(), userDetails.getAuthorities());
 authenticatedUser.setDetails(userDetails);

 if(authenticatedUser.isAuthenticated()) {
        SecurityContextHolder.getContext().setAuthentication(authenticatedUser);
 }

然后我使用 response.sendRedirect(url); 将用户重定向到 x 页面;

在控制器方法中,我试图将当前用户作为

@RequestMapping("/<pattern>")
public @ResponseBody <method_name>(HttpServletRequest req,HttpServletResponse resp){
     Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        if(auth==null){
            System.out.println("this is null");
        }
        else{
          // do something
        }
}

我在控制台中看到文本为“这是空的”。

如何在整个用户期间从 SecurityContext() 中保留当前用户/主体,直到用户注销。

4

1 回答 1

0

我得到了解决方案。

问题在于该特定 URI 组的标记的模式属性。

早些时候它是 /path/* 并且它失败了。我将其更改为 /path/** 并且它有效。

如果有人可以在这两种模式匹配(/* 和 /**)之间进行解释,那将会很有帮助。

于 2015-06-16T16:48:15.273 回答