我正在开发一个Spring应用程序,我正在使用HandlerInterceptorAdapter
的{{1}}方法对用户进行身份验证,如果用户已经过身份验证,我正在设置这样的请求属性:
prehandle()
如果用户未经过身份验证,我就是这样设置的
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
request.setAttribute("isAuthenticated",true);
request.setAttribute("user",user);
}
然后在控制器方法中我正在检索@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
request.setAttribute("isAuthenticated",false);
request.setAttribute("user",null);
}
这样的用户:
HttpServletRequest
问题是我需要在每个控制器方法中接收@GetMapping(value = "/user", produces = "application/json")
public Object getUserByToken(HttpServletRequest request) {
if((Boolean) request.getAttribute("isAuthenticated")) {
return request.getAttribute("user");
}
return ResponseEntity.status(UNAUTHORIZED).body("unauthorized");
}
以检查用户是否经过身份验证。
我想要的是一个在控制器方法之前和控制器类内部调用的方法,这样我就可以在一个地方设置用户并从所有其他控制器方法中获取
答案 0 :(得分:2)
以这种方式编写基本控制器:
public class BaseController {
@ModelAttribute("user")
public User getUser(HttpServletRequest request) {
return (User)request.getAttribute("user");
}
}
从BaseController
扩展所有控制器。
@RequestMapping(value = "/user", produces = "application/json")
public Object getUserByToken(@ModelAttribute("user") User user) {
// play with user object
}
我向您展示了用户的示例,同样也为身份验证标志做了。