我有一个登录控制器,我定义了一个会话变量,现在我想在我的应用程序的所有剩余控制器中访问该会话变量?
这是我的登录控制器代码段
@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代码段
@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中得到了空指针。
答案 0 :(得分:0)
我找到了符合我要求的解决方案。 实际上,我的要求是从登录控制器访问会话值到配置文件控制器。 所以我所做的不是在配置文件控制器中访问会话变量,而是在登录控制器中调用一个将返回所需值的方法。
@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");
}
}
ProfileController可
@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() 如果任何会话与请求相关联将返回的方法然后它将返回该会话,否则它将创建新会话。我的配置文件控制器中也应用了相同的概念。 而不是访问现有会话将创建新会话,因为两者是两个不同的请求。 出于这个原因,我按照上面的代码摆脱了我的要求。
答案 1 :(得分:0)
如果与当前登录的用户名有关,则只需将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";
}