java – 处理401错误(Spring Security)
发布时间:2020-12-15 02:09:41 所属栏目:Java 来源:网络整理
导读:我可以处理404错误. @ResponseStatus(value = HttpStatus.NOT_FOUND) @ExceptionHandler(NoHandlerFoundException.class) @ResponseBody public void noHandlerFoundException (HttpServletResponse response) throws IOException{ //some code } 但如何处理
我可以处理404错误.
@ResponseStatus(value = HttpStatus.NOT_FOUND) @ExceptionHandler(NoHandlerFoundException.class) @ResponseBody public void noHandlerFoundException (HttpServletResponse response) throws IOException{ //some code } 但如何处理401错误? 编辑我使用的是Java而不是web.xml 编辑我应该在NoHandlerFoundException中放置什么来处理HttpStatus.UNAUTHORIZED 编辑 验证失败时,我的方法不成功验证: 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); } } 此代码发送401错误html.我需要发送json,你可以在评论中看到它. 解决方法
这是一个完整的处理程序,适用于所有一小部分错误页面:
@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,ModelMap map) { map.addAttribute("http-error-code",HttpStatus.BAD_REQUEST); return processErrorCodes(ex,map); } @ExceptionHandler(ApplicationException.class) @RequestMapping(value="errorPage401",method=RequestMethod.GET) @ResponseStatus(value=HttpStatus.UNAUTHORIZED,reason="Unauthorized Request") public String handleUnauthorizedRequest(ApplicationException ex,HttpStatus.UNAUTHORIZED); return processErrorCodes(ex,map); } @ExceptionHandler(ApplicationException.class) @RequestMapping(value="errorPage404",method=RequestMethod.GET) @ResponseStatus(HttpStatus.NOT_FOUND) public String handleNotFoundRequest(ApplicationException ex,HttpStatus.NOT_FOUND); return processErrorCodes(ex,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,HttpStatus.INTERNAL_SERVER_ERROR); return processErrorCodes(ex,map); } @ExceptionHandler(ApplicationException.class) public void handleApplicationExceptions(Throwable exception,HttpServletResponse response) { } private String processErrorCodes(ApplicationException ex,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"; } } 基础控制器: @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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |