加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读