I can handle 404 error.
@ResponseStatus(value = HttpStatus.NOT_FOUND)
@ExceptionHandler(NoHandlerFoundException.class)
@ResponseBody
public void noHandlerFoundException (HttpServletResponse response) throws IOException{
//some code
}
But how to handle 401 error?
Edit I am using Java and not web.xml
Edit What should I put in NoHandlerFoundException to handle the HttpStatus.UNAUTHORIZED
Edit
I have method unsuccessfulAuthentication, when authentication failed:
public class StatelessLoginFilter extends AbstractAuthenticationProcessingFilter {
protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response,
AuthenticationException failed) throws IOException, ServletException {
SecurityContextHolder.clearContext();
if (logger.isDebugEnabled()) {
logger.debug("Authentication request failed: " + failed.toString());
logger.debug("Updated SecurityContextHolder to contain null Authentication");
logger.debug("Delegating to authentication failure handler " + failureHandler);
}
// response.setCharacterEncoding("UTF-8");
// response.getWriter().write(jsonService.toString(jsonService.getResponse(false, "Не удалось авторизоваться", "401")));
rememberMeServices.loginFail(request, response);
failureHandler.onAuthenticationFailure(request, response, failed);
}
}
This code sent 401 error html. I need to send json, you can see it in comments.
Solution. Review the existing Spring Security's authentication class, the “locked” feature is already implemented. To enable the limit login attempts, you need to set the UserDetails. isAccountNonLocked to false.
Using Java, we can customize the 403 error handling process by using the accessDeniedPage() or accessDeniedHandler() methods while configuring the HttpSecurity element.
Here is a complete handler for all a little collection of error pages :
@Controller
public class ErrorCodeController extends BaseController {
@ExceptionHandler(ApplicationException.class)
@RequestMapping(value="errorPage400", method=RequestMethod.GET)
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public String handleBadRequest(ApplicationException ex,HttpServletResponse response, ModelMap map) {
map.addAttribute("http-error-code", HttpStatus.BAD_REQUEST);
return processErrorCodes(ex,response,map);
}
@ExceptionHandler(ApplicationException.class)
@RequestMapping(value="errorPage401", method=RequestMethod.GET)
@ResponseStatus(value=HttpStatus.UNAUTHORIZED,reason="Unauthorized Request")
public String handleUnauthorizedRequest(ApplicationException ex,HttpServletResponse response, ModelMap map) {
map.addAttribute("http-error-code", HttpStatus.UNAUTHORIZED);
return processErrorCodes(ex,response,map);
}
@ExceptionHandler(ApplicationException.class)
@RequestMapping(value="errorPage404", method=RequestMethod.GET)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleNotFoundRequest(ApplicationException ex,HttpServletResponse response, ModelMap map) {
map.addAttribute("http-error-code", HttpStatus.NOT_FOUND);
return processErrorCodes(ex,response,map);
}
@ExceptionHandler(ApplicationException.class)
@RequestMapping(value="errorPage500", method=RequestMethod.GET)
@ResponseStatus(value=HttpStatus.INTERNAL_SERVER_ERROR,reason="Internal Server Error")
public String handleInternalServerError(ApplicationException ex,HttpServletResponse response, ModelMap map) {
map.addAttribute("http-error-code", HttpStatus.INTERNAL_SERVER_ERROR);
return processErrorCodes(ex,response,map);
}
@ExceptionHandler(ApplicationException.class)
public void handleApplicationExceptions(Throwable exception, HttpServletResponse response) {
}
private String processErrorCodes(ApplicationException ex,HttpServletResponse response, ModelMap map){
map.addAttribute("class", ClassUtils.getShortName(ex.getClass()));
map.addAttribute("message", ex.getMessage());
map.addAttribute("errorMessage", ex.getErrorMessage());
map.addAttribute("errorCode", ex.getErrorCode());
map.addAttribute("timestamp", ex.getCurrentDate());
return "errorPage";
}
}
Base Controller :
@Controller
@RequestMapping("/")
public class BaseController {
// Remember to add any exception that you suspect can be thrown in this web application.
@ExceptionHandler({ApplicationException.class,NullPointerException.class})
public ModelAndView handleException(Throwable exception,HttpServletRequest req) {
ModelMap model = new ModelMap();
ApplicationException ex = new ApplicationException();
String timeStamp = ex.getCurrentDate().toString();
//String temp = ClassUtils.getShortName(ex.getClass());
//model.addAttribute("class", ClassUtils.getShortName(ex.getClass()));
model.addAttribute("timeStamp", timeStamp);
return new ModelAndView("errorPage", model);
}
Web.xml :
<web-app id="WebApp_ID" version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>myApp</display-name>
<error-page>
<error-code>400</error-code>
<location>/errorPage400.xhtml</location>
</error-page>
<error-page>
<error-code>401</error-code>
<location>/errorPage401.xhtml</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/errorPage404.xhtml</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/errorPage500.xhtml</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/errorPage.xhtml</location>
</error-page>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With