{"action":"created","comment":{"url":"https://api.github.com/repos/spring-projects/spring-security/pulls/comments/200376589","pull_request_review_id":134680439,"id":200376589,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMDM3NjU4OQ==","diff_hunk":"@@ -0,0 +1,163 @@\n+/*\n+ * Copyright 2002-2018 the original author or authors.\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *      http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+\n+package org.springframework.security.oauth2.server.resource.web;\n+\n+import java.io.IOException;\n+import javax.servlet.FilterChain;\n+import javax.servlet.ServletException;\n+import javax.servlet.http.HttpServletRequest;\n+import javax.servlet.http.HttpServletResponse;\n+\n+import org.springframework.security.authentication.AuthenticationDetailsSource;\n+import org.springframework.security.authentication.AuthenticationManager;\n+import org.springframework.security.core.Authentication;\n+import org.springframework.security.core.AuthenticationException;\n+import org.springframework.security.core.context.SecurityContext;\n+import org.springframework.security.core.context.SecurityContextHolder;\n+import org.springframework.security.oauth2.core.OAuth2AuthenticationException;\n+import org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken;\n+import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationProvider;\n+import org.springframework.security.web.AuthenticationEntryPoint;\n+import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;\n+import org.springframework.util.Assert;\n+import org.springframework.web.filter.OncePerRequestFilter;\n+\n+/**\n+ * Authenticates requests that contain an OAuth 2.0\n+ * <a href=\"https://tools.ietf.org/html/rfc6750#section-1.2\" target=\"_blank\">Bearer Token</a>.\n+ *\n+ * This filter should be wired with an {@link AuthenticationManager} that can authenticate a\n+ * {@link BearerTokenAuthenticationToken}.\n+ *\n+ * @author Josh Cummings\n+ * @author Vedran Pavic\n+ * @author Joe Grandja\n+ * @since 5.1\n+ * @see <a href=\"https://tools.ietf.org/html/rfc6750\" target=\"_blank\">The OAuth 2.0 Authorization Framework: Bearer Token Usage</a>\n+ * @see JwtAuthenticationProvider\n+ */\n+public final class BearerTokenAuthenticationFilter extends OncePerRequestFilter {\n+\tprivate final AuthenticationManager authenticationManager;\n+\n+\tprivate final AuthenticationDetailsSource<HttpServletRequest, ?> authenticationDetailsSource =\n+\t\t\tnew WebAuthenticationDetailsSource();\n+\n+\tprivate BearerTokenResolver bearerTokenResolver = new DefaultBearerTokenResolver();\n+\n+\tprivate AuthenticationEntryPoint authenticationEntryPoint = new BearerTokenAuthenticationEntryPoint();\n+\n+\t/**\n+\t * Construct a {@code BearerTokenAuthenticationFilter} using the provided parameter(s)\n+\t * @param authenticationManager\n+\t */\n+\tpublic BearerTokenAuthenticationFilter(AuthenticationManager authenticationManager) {\n+\t\tAssert.notNull(authenticationManager, \"authenticationManager cannot be null\");\n+\t\tthis.authenticationManager = authenticationManager;\n+\t}\n+\n+\t/**\n+\t * Construct a {@code BearerTokenAuthenticationFilter} using the provided parameter(s)\n+\t * @param authenticationManager\n+\t * @param authenticationEntryPoint\n+\t */\n+\tpublic BearerTokenAuthenticationFilter(\n+\t\t\tAuthenticationManager authenticationManager,\n+\t\t\tAuthenticationEntryPoint authenticationEntryPoint) {\n+\n+\t\tthis(authenticationManager);\n+\n+\t\tAssert.notNull(authenticationEntryPoint, \"authenticationEntryPoint cannot be null\");\n+\t\tthis.authenticationEntryPoint = authenticationEntryPoint;\n+\t}\n+\n+\t/**\n+\t * Extract any <a href=\"https://tools.ietf.org/html/rfc6750#section-1.2\" target=\"_blank\">Bearer Token</a> from\n+\t * the request and attempt an authentication.\n+\t *\n+\t * @param request\n+\t * @param response\n+\t * @param filterChain\n+\t * @throws ServletException\n+\t * @throws IOException\n+\t */\n+\t@Override\n+\tprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)\n+\t\t\tthrows ServletException, IOException {\n+\n+\t\tfinal boolean debug = this.logger.isDebugEnabled();\n+\n+\t\tString token;\n+\n+\t\ttry {\n+\t\t\ttoken = this.bearerTokenResolver.resolve(request);\n+\t\t} catch ( OAuth2AuthenticationException invalid ) {\n+\t\t\tthis.authenticationEntryPoint.commence(request, response, invalid);\n+\t\t\treturn;\n+\t\t} catch ( Exception unexpected ) {","path":"oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/web/BearerTokenAuthenticationFilter.java","position":110,"original_position":110,"commit_id":"48cb2e996c0a95755bfffa0018efd148cb09e160","original_commit_id":"48cb2e996c0a95755bfffa0018efd148cb09e160","user":{"login":"jzheaux","id":3627351,"node_id":"MDQ6VXNlcjM2MjczNTE=","avatar_url":"https://avatars0.githubusercontent.com/u/3627351?v=4","gravatar_id":"","url":"https://api.github.com/users/jzheaux","html_url":"https://github.com/jzheaux","followers_url":"https://api.github.com/users/jzheaux/followers","following_url":"https://api.github.com/users/jzheaux/following{/other_user}","gists_url":"https://api.github.com/users/jzheaux/gists{/gist_id}","starred_url":"https://api.github.com/users/jzheaux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzheaux/subscriptions","organizations_url":"https://api.github.com/users/jzheaux/orgs","repos_url":"https://api.github.com/users/jzheaux/repos","events_url":"https://api.github.com/users/jzheaux/events{/privacy}","received_events_url":"https://api.github.com/users/jzheaux/received_events","type":"User","site_admin":false},"body":"Can you clarify what you meant here: \r\n\r\n> Allowing it to pass through makes it confusing as a user would then get some sort of other error that isn't related to the bearer token.\r\n\r\nThis statement makes sense if our premise is that this request is a bearer token request, and we just messed up in determining that.\r\n\r\nMy premise, though, is that if an unanticipated exception is thrown in the resolver, then we don't know that it is a bearer token request since the code that determines whether or not this filter wants to participate has a bug itself.\r\n\r\nIf I don't know that it is a bearer token request, then why should I be worried about errors from downstream filters (indeed those errors may be the correct ones since it may be a request of another type)?\r\n\r\nAgain, just looking for clarification on that specific point. Fail-fast is a good principle, and it would certainly help us prioritize that (hypothetical) bug instead of it lingering in the codebase.","created_at":"2018-07-05T14:38:52Z","updated_at":"2018-07-05T14:38:52Z","html_url":"https://github.com/spring-projects/spring-security/pull/5476#discussion_r200376589","pull_request_url":"https://api.github.com/repos/spring-projects/spring-security/pulls/5476","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/spring-projects/spring-security/pulls/comments/200376589"},"html":{"href":"https://github.com/spring-projects/spring-security/pull/5476#discussion_r200376589"},"pull_request":{"href":"https://api.github.com/repos/spring-projects/spring-security/pulls/5476"}},"in_reply_to_id":199924981},"pull_request":{"url":"https://api.github.com/repos/spring-projects/spring-security/pulls/5476","id":198768138,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk4NzY4MTM4","html_url":"https://github.com/spring-projects/spring-security/pull/5476","diff_url":"https://github.com/spring-projects/spring-security/pull/5476.diff","patch_url":"https://github.com/spring-projects/spring-security/pull/5476.patch","issue_url":"https://api.github.com/repos/spring-projects/spring-security/issues/5476","number":5476,"state":"open","locked":false,"title":"Resource Server JWK support","user":{"login":"jzheaux","id":3627351,"node_id":"MDQ6VXNlcjM2MjczNTE=","avatar_url":"https://avatars0.githubusercontent.com/u/3627351?v=4","gravatar_id":"","url":"https://api.github.com/users/jzheaux","html_url":"https://github.com/jzheaux","followers_url":"https://api.github.com/users/jzheaux/followers","following_url":"https://api.github.com/users/jzheaux/following{/other_user}","gists_url":"https://api.github.com/users/jzheaux/gists{/gist_id}","starred_url":"https://api.github.com/users/jzheaux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzheaux/subscriptions","organizations_url":"https://api.github.com/users/jzheaux/orgs","repos_url":"https://api.github.com/users/jzheaux/repos","events_url":"https://api.github.com/users/jzheaux/events{/privacy}","received_events_url":"https://api.github.com/users/jzheaux/received_events","type":"User","site_admin":false},"body":"Introduce support for OAuth 2.0 Bearer Token Authentication with JWT-encoded bearer tokens. This includes support for remote JWK set signature verification.\r\n\r\n#5121 \r\n#5125 \r\n#5128 \r\n#5130 \r\n#5237 ","created_at":"2018-07-02T19:25:07Z","updated_at":"2018-07-05T14:38:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4f6236e65aff41b21822bf7d20433ab9ceaa8208","assignee":null,"assignees":[],"requested_reviewers":[{"login":"jgrandja","id":10884212,"node_id":"MDQ6VXNlcjEwODg0MjEy","avatar_url":"https://avatars1.githubusercontent.com/u/10884212?v=4","gravatar_id":"","url":"https://api.github.com/users/jgrandja","html_url":"https://github.com/jgrandja","followers_url":"https://api.github.com/users/jgrandja/followers","following_url":"https://api.github.com/users/jgrandja/following{/other_user}","gists_url":"https://api.github.com/users/jgrandja/gists{/gist_id}","starred_url":"https://api.github.com/users/jgrandja/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jgrandja/subscriptions","organizations_url":"https://api.github.com/users/jgrandja/orgs","repos_url":"https://api.github.com/users/jgrandja/repos","events_url":"https://api.github.com/users/jgrandja/events{/privacy}","received_events_url":"https://api.github.com/users/jgrandja/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/spring-projects/spring-security/pulls/5476/commits","review_comments_url":"https://api.github.com/repos/spring-projects/spring-security/pulls/5476/comments","review_comment_url":"https://api.github.com/repos/spring-projects/spring-security/pulls/comments{/number}","comments_url":"https://api.github.com/repos/spring-projects/spring-security/issues/5476/comments","statuses_url":"https://api.github.com/repos/spring-projects/spring-security/statuses/48cb2e996c0a95755bfffa0018efd148cb09e160","head":{"label":"jzheaux:resource-server-jwks","ref":"resource-server-jwks","sha":"48cb2e996c0a95755bfffa0018efd148cb09e160","user":{"login":"jzheaux","id":3627351,"node_id":"MDQ6VXNlcjM2MjczNTE=","avatar_url":"https://avatars0.githubusercontent.com/u/3627351?v=4","gravatar_id":"","url":"https://api.github.com/users/jzheaux","html_url":"https://github.com/jzheaux","followers_url":"https://api.github.com/users/jzheaux/followers","following_url":"https://api.github.com/users/jzheaux/following{/other_user}","gists_url":"https://api.github.com/users/jzheaux/gists{/gist_id}","starred_url":"https://api.github.com/users/jzheaux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzheaux/subscriptions","organizations_url":"https://api.github.com/users/jzheaux/orgs","repos_url":"https://api.github.com/users/jzheaux/repos","events_url":"https://api.github.com/users/jzheaux/events{/privacy}","received_events_url":"https://api.github.com/users/jzheaux/received_events","type":"User","site_admin":false},"repo":{"id":117196711,"node_id":"MDEwOlJlcG9zaXRvcnkxMTcxOTY3MTE=","name":"spring-security","full_name":"jzheaux/spring-security","owner":{"login":"jzheaux","id":3627351,"node_id":"MDQ6VXNlcjM2MjczNTE=","avatar_url":"https://avatars0.githubusercontent.com/u/3627351?v=4","gravatar_id":"","url":"https://api.github.com/users/jzheaux","html_url":"https://github.com/jzheaux","followers_url":"https://api.github.com/users/jzheaux/followers","following_url":"https://api.github.com/users/jzheaux/following{/other_user}","gists_url":"https://api.github.com/users/jzheaux/gists{/gist_id}","starred_url":"https://api.github.com/users/jzheaux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jzheaux/subscriptions","organizations_url":"https://api.github.com/users/jzheaux/orgs","repos_url":"https://api.github.com/users/jzheaux/repos","events_url":"https://api.github.com/users/jzheaux/events{/privacy}","received_events_url":"https://api.github.com/users/jzheaux/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jzheaux/spring-security","description":"Spring Security","fork":true,"url":"https://api.github.com/repos/jzheaux/spring-security","forks_url":"https://api.github.com/repos/jzheaux/spring-security/forks","keys_url":"https://api.github.com/repos/jzheaux/spring-security/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jzheaux/spring-security/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jzheaux/spring-security/teams","hooks_url":"https://api.github.com/repos/jzheaux/spring-security/hooks","issue_events_url":"https://api.github.com/repos/jzheaux/spring-security/issues/events{/number}","events_url":"https://api.github.com/repos/jzheaux/spring-security/events","assignees_url":"https://api.github.com/repos/jzheaux/spring-security/assignees{/user}","branches_url":"https://api.github.com/repos/jzheaux/spring-security/branches{/branch}","tags_url":"https://api.github.com/repos/jzheaux/spring-security/tags","blobs_url":"https://api.github.com/repos/jzheaux/spring-security/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jzheaux/spring-security/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jzheaux/spring-security/git/refs{/sha}","trees_url":"https://api.github.com/repos/jzheaux/spring-security/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jzheaux/spring-security/statuses/{sha}","languages_url":"https://api.github.com/repos/jzheaux/spring-security/languages","stargazers_url":"https://api.github.com/repos/jzheaux/spring-security/stargazers","contributors_url":"https://api.github.com/repos/jzheaux/spring-security/contributors","subscribers_url":"https://api.github.com/repos/jzheaux/spring-security/subscribers","subscription_url":"https://api.github.com/repos/jzheaux/spring-security/subscription","commits_url":"https://api.github.com/repos/jzheaux/spring-security/commits{/sha}","git_commits_url":"https://api.github.com/repos/jzheaux/spring-security/git/commits{/sha}","comments_url":"https://api.github.com/repos/jzheaux/spring-security/comments{/number}","issue_comment_url":"https://api.github.com/repos/jzheaux/spring-security/issues/comments{/number}","contents_url":"https://api.github.com/repos/jzheaux/spring-security/contents/{+path}","compare_url":"https://api.github.com/repos/jzheaux/spring-security/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jzheaux/spring-security/merges","archive_url":"https://api.github.com/repos/jzheaux/spring-security/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jzheaux/spring-security/downloads","issues_url":"https://api.github.com/repos/jzheaux/spring-security/issues{/number}","pulls_url":"https://api.github.com/repos/jzheaux/spring-security/pulls{/number}","milestones_url":"https://api.github.com/repos/jzheaux/spring-security/milestones{/number}","notifications_url":"https://api.github.com/repos/jzheaux/spring-security/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jzheaux/spring-security/labels{/name}","releases_url":"https://api.github.com/repos/jzheaux/spring-security/releases{/id}","deployments_url":"https://api.github.com/repos/jzheaux/spring-security/deployments","created_at":"2018-01-12T05:29:44Z","updated_at":"2018-06-20T21:44:50Z","pushed_at":"2018-07-03T18:35:16Z","git_url":"git://github.com/jzheaux/spring-security.git","ssh_url":"git@github.com:jzheaux/spring-security.git","clone_url":"https://github.com/jzheaux/spring-security.git","svn_url":"https://github.com/jzheaux/spring-security","homepage":"http://spring.io/spring-security","size":31007,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":8,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":8,"watchers":0,"default_branch":"master"}},"base":{"label":"spring-projects:master","ref":"master","sha":"998d1a064babd04951ae591adc500a20d7c31e56","user":{"login":"spring-projects","id":317776,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxNzc3Ng==","avatar_url":"https://avatars0.githubusercontent.com/u/317776?v=4","gravatar_id":"","url":"https://api.github.com/users/spring-projects","html_url":"https://github.com/spring-projects","followers_url":"https://api.github.com/users/spring-projects/followers","following_url":"https://api.github.com/users/spring-projects/following{/other_user}","gists_url":"https://api.github.com/users/spring-projects/gists{/gist_id}","starred_url":"https://api.github.com/users/spring-projects/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spring-projects/subscriptions","organizations_url":"https://api.github.com/users/spring-projects/orgs","repos_url":"https://api.github.com/users/spring-projects/repos","events_url":"https://api.github.com/users/spring-projects/events{/privacy}","received_events_url":"https://api.github.com/users/spring-projects/received_events","type":"Organization","site_admin":false},"repo":{"id":3148979,"node_id":"MDEwOlJlcG9zaXRvcnkzMTQ4OTc5","name":"spring-security","full_name":"spring-projects/spring-security","owner":{"login":"spring-projects","id":317776,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxNzc3Ng==","avatar_url":"https://avatars0.githubusercontent.com/u/317776?v=4","gravatar_id":"","url":"https://api.github.com/users/spring-projects","html_url":"https://github.com/spring-projects","followers_url":"https://api.github.com/users/spring-projects/followers","following_url":"https://api.github.com/users/spring-projects/following{/other_user}","gists_url":"https://api.github.com/users/spring-projects/gists{/gist_id}","starred_url":"https://api.github.com/users/spring-projects/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spring-projects/subscriptions","organizations_url":"https://api.github.com/users/spring-projects/orgs","repos_url":"https://api.github.com/users/spring-projects/repos","events_url":"https://api.github.com/users/spring-projects/events{/privacy}","received_events_url":"https://api.github.com/users/spring-projects/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/spring-projects/spring-security","description":"Spring Security","fork":false,"url":"https://api.github.com/repos/spring-projects/spring-security","forks_url":"https://api.github.com/repos/spring-projects/spring-security/forks","keys_url":"https://api.github.com/repos/spring-projects/spring-security/keys{/key_id}","collaborators_url":"https://api.github.com/repos/spring-projects/spring-security/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/spring-projects/spring-security/teams","hooks_url":"https://api.github.com/repos/spring-projects/spring-security/hooks","issue_events_url":"https://api.github.com/repos/spring-projects/spring-security/issues/events{/number}","events_url":"https://api.github.com/repos/spring-projects/spring-security/events","assignees_url":"https://api.github.com/repos/spring-projects/spring-security/assignees{/user}","branches_url":"https://api.github.com/repos/spring-projects/spring-security/branches{/branch}","tags_url":"https://api.github.com/repos/spring-projects/spring-security/tags","blobs_url":"https://api.github.com/repos/spring-projects/spring-security/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/spring-projects/spring-security/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/spring-projects/spring-security/git/refs{/sha}","trees_url":"https://api.github.com/repos/spring-projects/spring-security/git/trees{/sha}","statuses_url":"https://api.github.com/repos/spring-projects/spring-security/statuses/{sha}","languages_url":"https://api.github.com/repos/spring-projects/spring-security/languages","stargazers_url":"https://api.github.com/repos/spring-projects/spring-security/stargazers","contributors_url":"https://api.github.com/repos/spring-projects/spring-security/contributors","subscribers_url":"https://api.github.com/repos/spring-projects/spring-security/subscribers","subscription_url":"https://api.github.com/repos/spring-projects/spring-security/subscription","commits_url":"https://api.github.com/repos/spring-projects/spring-security/commits{/sha}","git_commits_url":"https://api.github.com/repos/spring-projects/spring-security/git/commits{/sha}","comments_url":"https://api.github.com/repos/spring-projects/spring-security/comments{/number}","issue_comment_url":"https://api.github.com/repos/spring-projects/spring-security/issues/comments{/number}","contents_url":"https://api.github.com/repos/spring-projects/spring-security/contents/{+path}","compare_url":"https://api.github.com/repos/spring-projects/spring-security/compare/{base}...{head}","merges_url":"https://api.github.com/repos/spring-projects/spring-security/merges","archive_url":"https://api.github.com/repos/spring-projects/spring-security/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/spring-projects/spring-security/downloads","issues_url":"https://api.github.com/repos/spring-projects/spring-security/issues{/number}","pulls_url":"https://api.github.com/repos/spring-projects/spring-security/pulls{/number}","milestones_url":"https://api.github.com/repos/spring-projects/spring-security/milestones{/number}","notifications_url":"https://api.github.com/repos/spring-projects/spring-security/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/spring-projects/spring-security/labels{/name}","releases_url":"https://api.github.com/repos/spring-projects/spring-security/releases{/id}","deployments_url":"https://api.github.com/repos/spring-projects/spring-security/deployments","created_at":"2012-01-10T21:50:57Z","updated_at":"2018-07-05T13:03:53Z","pushed_at":"2018-07-04T16:45:57Z","git_url":"git://github.com/spring-projects/spring-security.git","ssh_url":"git@github.com:spring-projects/spring-security.git","clone_url":"https://github.com/spring-projects/spring-security.git","svn_url":"https://github.com/spring-projects/spring-security","homepage":"http://spring.io/spring-security","size":30971,"stargazers_count":2592,"watchers_count":2592,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":2549,"mirror_url":null,"archived":false,"open_issues_count":852,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":2549,"open_issues":852,"watchers":2592,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/spring-projects/spring-security/pulls/5476"},"html":{"href":"https://github.com/spring-projects/spring-security/pull/5476"},"issue":{"href":"https://api.github.com/repos/spring-projects/spring-security/issues/5476"},"comments":{"href":"https://api.github.com/repos/spring-projects/spring-security/issues/5476/comments"},"review_comments":{"href":"https://api.github.com/repos/spring-projects/spring-security/pulls/5476/comments"},"review_comment":{"href":"https://api.github.com/repos/spring-projects/spring-security/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/spring-projects/spring-security/pulls/5476/commits"},"statuses":{"href":"https://api.github.com/repos/spring-projects/spring-security/statuses/48cb2e996c0a95755bfffa0018efd148cb09e160"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"jzheaux"}}