我有一个简单的SpringBoot RestController:
@RestController
public class PasswordController implements ErrorController {
private static final String ERROR_PATH = "/error";
public static final String IS_USER_LOGGED_IN = "isUserLoggedIn";
public static final String BAD_REQUEST_MESSAGE = "Bad Request ¯\\_(ツ)_/¯";
@Autowired
private PasswordService passwordService;
@Autowired
private HttpSession httpSession;
@RequestMapping(value = "/user/create/{name}/{password}", method = RequestMethod.GET)
public String createNewUserAndPassword(@PathVariable final String name, @PathVariable final String password) {
try {
return passwordService.createNewUserAndPassword(name, password);
} catch (UnsupportedEncodingException | NoSuchAlgorithmException e) {
return ERROR_PATH;
}
}
@RequestMapping(value = "user/login/{name}/{password}", method = RequestMethod.GET)
public String loginUser(@PathVariable final String name, @PathVariable final String password) throws UnsupportedEncodingException, NoSuchAlgorithmException {
// return passwordService.loginUser(name, password);
final String result = passwordService.loginUser(name, password);
if (result.contains(PasswordService.WELCOME_MESSAGE)) {
this.httpSession.setAttribute("name", name);
}
return result;
}
@Override
public String getErrorPath() {
return ERROR_PATH;
}
@RequestMapping("/error")
public String error() {
return BAD_REQUEST_MESSAGE;
}
@RequestMapping(value = "getEnemies", method = RequestMethod.GET)
public String getEnemies() {
if (this.httpSession.getAttribute("name") != null) {
return "enemies List....";
} else {
return "(ง'̀-'́)ง";
}
}
}
你可以看到这很简单,但是我在这里保存的字符串:
this.httpSession.setAttribute("name", name)
只要始终为null,永远就可以在此处检索
this.httpSession.getAttribute("name") != null
我调试了代码,您可以在set
之后立即检索字符串。但是,当它到达另一个方法时,它将无法在HttpSession
对象更改时起作用。 (它甚至还有另一个ID)
可能是什么问题?感谢
答案 0 :(得分:0)
假设其他处理程序(getEnemies())意味着其他方法
是的,对象会发生变化,因为它们都是在不同线程上运行的不同的休息调用。我不确定你注入的HttpSession对象的根源是什么,但是你在其中存储的内容可能不是持久的(可能是该线程的本地)。这就是让你在另一种方法中获得空值的原因。