我正在尝试使用 HttpSession 属性在我的应用程序中实现身份验证机制。 用户登录后,将设置 userContext 属性,我希望它在每次后续调用后端时都作为函数参数。 这是我的登录端点代码:
@RequestMapping(value = "/login")
@CrossOrigin(origins="http://localhost:19006", allowCredentials = "true")
@Override
public Response login(@RequestBody LoginRequest loginRequest, HttpSession session){
System.out.println("login");
// TODO: Maybe implement Service Layer User object
Response<User> response = facade.login(loginRequest);
if(!response.iswas_exception()) {
var userContext = new UserContext(response.getValue());
session.setAttribute(USER_CONTEXT_ATTRIBUTE_NAME, userContext);
}
return response;
}
这是另一个列出系统所有用户的函数的代码:
@RequestMapping(value = "/view_users")
@CrossOrigin(origins="http://localhost:19006", allowCredentials = "true")
@Override
public Response view_users(@SessionAttribute("userContext") UserContext userContext) {
return facade.view_users(userContext);
}
我使用 axios 来发送请求,我通过以下方式创建实例:
const instance = axios.create({
withCredentials : true
});
我遇到的问题是,当我在登录后调用后端时,收到 400“Bad Request”响应:
然后我确实进入了端点函数,因为我在那里有一个断点,我看到我到达那里并且我看到参数被正确传递。但是当我从代码执行调用时它不起作用,这是调用端点的代码:
view_users(){
alert("in view users");
return axios.get(VIEW_USER_PATH)
.then(res => {
console.log(res);
return res.data;
// return new Response(res.data);
})
.catch(res => Response.create(CATCH,true, CONNECTION_ERROR ));
}
一开始我在@CrossOrigin 中没有 origin 和 allowCredentials 标头,所以我添加了它们,但它仍然不起作用。 让我烦恼的是,当我双击网络选项卡中的 view_users 选项卡时,它会重新启动请求并且它可以工作。那么为什么它在代码的第一次尝试中不起作用?