【问题标题】:How to access the session variable in one controller to the other controller in SpringMVC?如何将一个控制器中的会话变量访问到 SpringMVC 中的另一个控制器?
【发布时间】:2018-07-01 01:28:22
【问题描述】:

我有一个登录控制器,因为我定义了一个会话变量,现在我想在我的应用程序的所有剩余控制器中访问该会话变量?

这是我的登录控制器代码 sn-p

@RequestMapping(value = "/login", method = RequestMethod.POST,produces = "application/json")
public @ResponseBody Map<String, String> validateUser(@RequestBody String loginParameters,HttpServletRequest request) throws Exception {
    try{
        HttpSession session=request.getSession();
        JSONObject json = new JSONObject(loginParameters.trim());
        String un=json.getString("username");
        session.setAttribute("username", un);

这是我的 ProfileController 代码 sn-p

@Controller
public class ProfileController {    
@RequestMapping(value = "/getUserData", method = RequestMethod.GET,produces = "application/json")
    public @ResponseBody Map<String, String> getUser(HttpServletRequest req) throws Exception {
        try{

            HttpSession session=req.getSession();
            String loggedInUser=(String)session.getAttribute("username");

            System.out.println("UserName is  "+ loggedInUser);

现在我想在我的另一个配置文件控制器中访问这个会话变量(用户名)。我试过这样,但我在 ProfileController 中得到了空指针期望。

【问题讨论】:

标签: java spring spring-mvc session


【解决方案1】:

我找到了满足我要求的解决方案。 实际上,我的要求是从登录控制器访问会话值到配置文件控制器。 所以我所做的不是访问配置文件控制器中的会话变量,而是调用登录控制器中的一个方法,该方法将返回我所需的值。

@Controller
public class LoginController {
private HttpSession session=null;
    @RequestMapping(value = "/login", method = RequestMethod.POST,produces = "application/json")
public @ResponseBody Map<String, String> validateUser(@RequestBody String loginParameters,HttpServletRequest request) throws Exception {
try{
    session=request.getSession();
    JSONObject json = new JSONObject(loginParameters.trim());
    String un=json.getString("username");
    session.setAttribute("username", un);
}catch(Exception e)
{
}

}
public String getUserName()
{
return session.getAttribute("username");
}
}

配置文件控制器

@Controller
public class ProfileController {
@Autowired
private LoginController loginControllerObj;
@RequestMapping(value = "/getUserData", method = RequestMethod.GET,produces = "application/json")
public @ResponseBody Map<String, String> getUser(HttpServletRequest req) throws Exception {
    try{


        String loggedInUser=loginControllerObj.getUserName();

        System.out.println("UserName is  "+ loggedInUser);

根据我的理解,在我的问题中。我在 Profile 控制器中遇到空指针异常,这是因为如果我们想访问会话,那么我们需要调用 request.getSession() 如果任何会话与请求相关联,则将返回的方法,如果没有,它将返回该方法,然后创建一个新会话。我的配置文件控制器中的相同概念也适用。 不是访问现有会话,而是创建新会话,因为两者都是两个不同的请求。 出于这个原因,我按照上面的代码摆脱了我的要求。

【讨论】:

    【解决方案2】:

    如果是关于当前登录的用户名,那么你只需将 Principal 参数传递给控制器​​方法。

      @RequestMapping(value="/login", method = RequestMethod.GET)
      public String methodName(ModelMap model, Principal principal ) {
    
      String name = principal.getName(); //get logged in username
      model.addAttribute("username", name);
      return "page";
    

    }

    【讨论】:

      猜你喜欢
      • 2017-03-23
      • 2011-07-05
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多