@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
if (currentUser.getStatus().equals(UserStatus.BLOCKED.toString())) {
throw new LockedException(
"UserEntity.validation.status.isBlocked" );
}
然后失败:
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) throws IOException, ServletException {//TODO implement session limitations
if (e instanceof LockedException) {
response.sendRedirect("/user-error");
}
}
我从这里向这里发送错误:
@RequestMapping("/user-error")
public String handleUserError(HttpServletRequest request) {
但我无法从该请求中获得lockedexception
。
我想发送一些这样的参数:
Map<String, Object> data = new HashMap<>();
// data.put(
// "timestamp",
// Calendar.getInstance().getTime());
我应该使用这样的东西吗?
request.setAttribute();
或
// data.put(
// "exception",
// e.getMessage());
//
// response.getOutputStream()
// .println(objectMapper.writeValueAsString(data));
//
我该怎么办?
我可以这样设置:
request.setAttribute();
但是也许不需要。因为已经存在异常。
例如在这里
if (e instanceof LockedException) {
request.setAttribute("message", e.getMessage());
在调试模式下,我可以得到:
request.getAttribute("message") = "UserEntity.validation.status.isBlocked"
但是当它到达端点时,它变为空
我应该为该endpoinr使用另一个参数,就像这里: https://stackoverflow.com/a/50429613/11369236