{"id":1418,"date":"2023-03-20T21:44:40","date_gmt":"2023-03-20T13:44:40","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=1418"},"modified":"2023-04-28T21:06:24","modified_gmt":"2023-04-28T13:06:24","slug":"spring-security-oauth2-authentication-resource-server-exception-handling","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/20\/spring-security-oauth2-authentication-resource-server-exception-handling\/","title":{"rendered":"Spring Security OAuth2\u8ba4\u8bc1\u8d44\u6e90\u670d\u52a1\u5668\u5f02\u5e38\u5904\u7406"},"content":{"rendered":"<h2>\u4e24\u4e2a\u5f02\u5e38\u5904\u7406\u7684\u63a5\u53e3<\/h2>\n<p><code>AuthenticationEntryPoint<\/code>\uff1a\u7528\u6765\u89e3\u51b3\u533f\u540d\u7528\u6237\u8bbf\u95ee\u65e0\u6743\u9650\u8d44\u6e90\u65f6\u7684\u5f02\u5e38\uff0c\u4e5f\u5c31\u662f\u8ddftoken\u76f8\u5173\u7684\u8d44\u6e90\u5f02\u5e38<br \/>\n<code>AccessDeniedHandler<\/code>\uff1a\u7528\u6765\u89e3\u51b3\u8ba4\u8bc1\u8fc7\u7684\u7528\u6237\u8bbf\u95ee\u65e0\u6743\u9650\u8d44\u6e90\u65f6\u7684\u5f02\u5e38\uff0c\u4e3b\u8981\u8ddf\u6743\u9650\u63a7\u5236\u76f8\u5173<\/p>\n<p><!-- more --><\/p>\n<h2>\u81ea\u5b9a\u4e49AuthenticationEntryPoint\u5f02\u5e38\u5904\u7406\u7c7b<\/h2>\n<pre><code class=\"language-java\">\/**\n * @Description: \u7528\u6765\u89e3\u51b3\u533f\u540d\u7528\u6237\u8bbf\u95ee\u65e0\u6743\u9650\u8d44\u6e90\u65f6\u7684\u5f02\u5e38\n * @Package: cn.appblog.security.oauth2.handler.UserAuthenticationEntryPoint\n * @Version: 1.0\n *\/\n@Component\npublic class UserAuthenticationEntryPoint implements AuthenticationEntryPoint {\n    @Override\n    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) throws IOException, ServletException {\n        HttpUtils.writeError(BaseResponse.createResponse(HttpStatusMsg.AUTHENTICATION_EXCEPTION.getStatus(), StringUtils.join(HttpStatusMsg.AUTHENTICATION_EXCEPTION.getMessage(), &quot;,&quot;, e.toString())), response);\n    }\n}<\/code><\/pre>\n<h2>\u81ea\u5b9a\u4e49AccessDeniedHandler\u63a5\u53e3\u5b9e\u73b0\u7c7b<\/h2>\n<pre><code class=\"language-java\">\/**\n * @Description: \u7528\u6765\u89e3\u51b3\u8ba4\u8bc1\u8fc7\u7684\u7528\u6237\u8bbf\u95ee\u65e0\u6743\u9650\u8d44\u6e90\u65f6\u7684\u5f02\u5e38\n * @Package: cn.appblog.security.oauth2.handler.AjaxAccessDeniedHandler\n * @Version: 1.0\n *\/\n@Component\npublic class UserAccessDeniedHandler implements AccessDeniedHandler {\n\n    @Override\n    public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException e) throws IOException, ServletException {\n        HttpUtils.writeError(BaseResponse.createResponse(HttpStatusMsg.ACCESS_DENIDED_EXCEPTION.getStatus(),\n                StringUtils.join(HttpStatusMsg.ACCESS_DENIDED_EXCEPTION.getMessage(), &quot;,&quot;, e.toString())), response);\n    }\n}<\/code><\/pre>\n<h2>\u76f8\u5173\u5de5\u5177\u65b9\u6cd5<\/h2>\n<pre><code class=\"language-java\">public class HttpUtils {\n    \/**\n     * \u5f02\u5e38\u8f93\u51fa\u5de5\u5177\u7c7b\n     *\/\n    public static void writeError(BaseResponse bs, HttpServletResponse response) throws IOException {\n        response.setContentType(&quot;application\/json,charset=utf-8&quot;);\n        response.setStatus(bs.getStatus());\n        ObjectMapper objectMapper = new ObjectMapper();\n        objectMapper.writeValue(response.getOutputStream(), bs);\n    }\n\n    \/**\n     * SUCESS\u8f93\u51fa\u5de5\u5177\u7c7b\n     *\/\n    public static void writeSuccess(BaseResponse bs, HttpServletResponse response) throws IOException {\n        response.setContentType(&quot;application\/json,charset=utf-8&quot;);\n        response.setStatus(bs.getStatus());\n        ObjectMapper objectMapper = new ObjectMapper();\n        objectMapper.writeValue(response.getOutputStream(), bs);\n    }\n}<\/code><\/pre>\n<pre><code class=\"language-java\">@Data\npublic class BaseResponse implements Serializable {\n    private int status;\n    private String message;\n    @JsonInclude(JsonInclude.Include.NON_NULL)\n    private Object data;\n\n    \/**\n     * \u521b\u5efa\u54cd\u5e94\u5bf9\u8c61\n     *\/\n    public static BaseResponse createResponse(int status, String message) {\n        BaseResponse baseResponse = new BaseResponse();\n        baseResponse.setStatus(status);\n        baseResponse.setMessage(message);\n        return baseResponse;\n    }\n\n    \/**\n     * \u521b\u5efa\u54cd\u5e94\u5bf9\u8c61\n     *\/\n    public static BaseResponse createResponse(HttpStatusMsg httpStatusMsg) {\n        BaseResponse baseResponse = new BaseResponse();\n        baseResponse.setStatus(httpStatusMsg.getStatus());\n        baseResponse.setMessage(httpStatusMsg.getMessage());\n        return baseResponse;\n    }\n\n    \/**\n     * \u521b\u5efa\u54cd\u5e94\u5bf9\u8c61\n     *\/\n    public static BaseResponse createResponse(int status, String message, Object data) {\n        BaseResponse baseResponse = new BaseResponse();\n        baseResponse.setStatus(status);\n        baseResponse.setMessage(message);\n        baseResponse.setData(data);\n        return baseResponse;\n    }\n\n    \/**\n     * \u521b\u5efa\u54cd\u5e94\u5bf9\u8c61\n     *\/\n    public static BaseResponse createResponse(HttpStatusMsg httpStatusMsg, Object data) {\n        BaseResponse baseResponse = new BaseResponse();\n        baseResponse.setStatus(httpStatusMsg.getStatus());\n        baseResponse.setMessage(httpStatusMsg.getMessage());\n        baseResponse.setData(data);\n        return baseResponse;\n    }\n}<\/code><\/pre>\n<p>\u672c\u6587\u8f6c\u8f7d\u53c2\u8003 <a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/blog.csdn.net\/yaomingyang\/column\/info\/41645\" title=\"\u539f\u6587\">\u539f\u6587<\/a> \u5e76\u52a0\u4ee5\u8c03\u8bd5<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e24\u4e2a\u5f02\u5e38\u5904\u7406\u7684\u63a5\u53e3 AuthenticationEntryPoint\uff1a\u7528\u6765\u89e3\u51b3\u533f\u540d\u7528\u6237\u8bbf\u95ee\u65e0\u6743\u9650\u8d44\u6e90\u65f6\u7684\u5f02\u5e38\uff0c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[354],"tags":[353],"class_list":["post-1418","post","type-post","status-publish","format-standard","hentry","category-spring-security","tag-oauth2"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1418","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=1418"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1418\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=1418"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=1418"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=1418"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}