{"action":"closed","issue":{"url":"https://api.github.com/repos/pac4j/pac4j/issues/343","labels_url":"https://api.github.com/repos/pac4j/pac4j/issues/343/labels{/name}","comments_url":"https://api.github.com/repos/pac4j/pac4j/issues/343/comments","events_url":"https://api.github.com/repos/pac4j/pac4j/issues/343/events","html_url":"https://github.com/pac4j/pac4j/issues/343","id":115466738,"number":343,"title":"Matcher to replace excludePath","user":{"login":"leleuj","id":1038508,"avatar_url":"https://avatars.githubusercontent.com/u/1038508?v=3","gravatar_id":"","url":"https://api.github.com/users/leleuj","html_url":"https://github.com/leleuj","followers_url":"https://api.github.com/users/leleuj/followers","following_url":"https://api.github.com/users/leleuj/following{/other_user}","gists_url":"https://api.github.com/users/leleuj/gists{/gist_id}","starred_url":"https://api.github.com/users/leleuj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/leleuj/subscriptions","organizations_url":"https://api.github.com/users/leleuj/orgs","repos_url":"https://api.github.com/users/leleuj/repos","events_url":"https://api.github.com/users/leleuj/events{/privacy}","received_events_url":"https://api.github.com/users/leleuj/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/pac4j/pac4j/milestones/5","html_url":"https://github.com/pac4j/pac4j/milestones/1.8.1","labels_url":"https://api.github.com/repos/pac4j/pac4j/milestones/5/labels","id":1313196,"number":5,"title":"1.8.1","description":null,"creator":{"login":"leleuj","id":1038508,"avatar_url":"https://avatars.githubusercontent.com/u/1038508?v=3","gravatar_id":"","url":"https://api.github.com/users/leleuj","html_url":"https://github.com/leleuj","followers_url":"https://api.github.com/users/leleuj/followers","following_url":"https://api.github.com/users/leleuj/following{/other_user}","gists_url":"https://api.github.com/users/leleuj/gists{/gist_id}","starred_url":"https://api.github.com/users/leleuj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/leleuj/subscriptions","organizations_url":"https://api.github.com/users/leleuj/orgs","repos_url":"https://api.github.com/users/leleuj/repos","events_url":"https://api.github.com/users/leleuj/events{/privacy}","received_events_url":"https://api.github.com/users/leleuj/received_events","type":"User","site_admin":false},"open_issues":2,"closed_issues":16,"state":"open","created_at":"2015-09-18T11:46:59Z","updated_at":"2015-11-12T09:21:38Z","due_on":null,"closed_at":null},"comments":1,"created_at":"2015-11-06T09:24:30Z","updated_at":"2015-11-12T09:21:38Z","closed_at":"2015-11-12T09:21:38Z","body":"This configuration from Spring Security (for OAuth support):\r\n\r\n```\r\n<security:intercept-url pattern=\"/oauth2.0/accessToken\" access=\"permitAll\" method=\"OPTIONS\" />\r\n<security:intercept-url pattern=\"/oauth2.0/accessToken\" access=\"isAuthenticated()\" />\r\n```\r\n\r\ndraws my attention on the fact that excluding path can be enhanced with excluding HTTP methods so finally some matching concept.\r\n\r\nI would create a `Matcher` interface with a `boolean matches(WebContext context)` method and two implementations: `ExcludePathMatcher` and `ExcludeHttpMethodMatcher`.\r\nThe `excludePath` parameter would be replaced by a `matcherName` paremeter in the pac4j implementations (like the `clientName` and `authorizerName` parameters): a list of matchers to meet.\r\nThe `Config` would have a new `addMatcher`, `setMatcher` and `setMatchers` methods.\r\nA new `MatchingChecker` interface and a `DefaultMatchingChecker` implementation would be necessary for implementations to perform matching.\r\n"}}