keycloak
公開メンバ関数 | 静的公開変数類 | 限定公開変数類 | 非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.adapters.servlet.KeycloakOIDCFilter クラス
org.keycloak.adapters.servlet.KeycloakOIDCFilter の継承関係図
Inheritance graph
org.keycloak.adapters.servlet.KeycloakOIDCFilter 連携図
Collaboration graph

公開メンバ関数

 KeycloakOIDCFilter (KeycloakConfigResolver definedconfigResolver)
 
 KeycloakOIDCFilter ()
 
void init (final FilterConfig filterConfig) throws ServletException
 
void doFilter (ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
 
void destroy ()
 

静的公開変数類

static final String SKIP_PATTERN_PARAM = "keycloak.config.skipPattern"
 
static final String CONFIG_RESOLVER_PARAM = "keycloak.config.resolver"
 
static final String CONFIG_FILE_PARAM = "keycloak.config.file"
 
static final String CONFIG_PATH_PARAM = "keycloak.config.path"
 

限定公開変数類

AdapterDeploymentContext deploymentContext
 
SessionIdMapper idMapper = new InMemorySessionIdMapper()
 
NodesRegistrationManagement nodesRegistrationManagement
 
Pattern skipPattern
 

非公開メンバ関数

KeycloakDeployment createKeycloakDeploymentFrom (InputStream is)
 
boolean shouldSkip (HttpServletRequest request)
 

非公開変数類

final KeycloakConfigResolver definedconfigResolver
 

静的非公開変数類

static final Logger log = Logger.getLogger("" + KeycloakOIDCFilter.class)
 

詳解

著者
Bill Burke
バージョン
Revision
1

構築子と解体子

◆ KeycloakOIDCFilter() [1/2]

org.keycloak.adapters.servlet.KeycloakOIDCFilter.KeycloakOIDCFilter ( KeycloakConfigResolver  definedconfigResolver)
inline

Constructor that can be used to define a

KeycloakConfigResolver

that will be used at initialization to provide the

KeycloakDeployment

.

引数
definedconfigResolverthe resolver
82  {
84  }
final KeycloakConfigResolver definedconfigResolver
Definition: KeycloakOIDCFilter.java:75

◆ KeycloakOIDCFilter() [2/2]

org.keycloak.adapters.servlet.KeycloakOIDCFilter.KeycloakOIDCFilter ( )
inline
86  {
87  this(null);
88  }

関数詳解

◆ createKeycloakDeploymentFrom()

KeycloakDeployment org.keycloak.adapters.servlet.KeycloakOIDCFilter.createKeycloakDeploymentFrom ( InputStream  is)
inlineprivate
135  {
136  if (is == null) {
137  log.fine("No adapter configuration. Keycloak is unconfigured and will deny all requests.");
138  return new KeycloakDeployment();
139  }
140  return KeycloakDeploymentBuilder.build(is);
141  }
static final Logger log
Definition: KeycloakOIDCFilter.java:57

◆ destroy()

void org.keycloak.adapters.servlet.KeycloakOIDCFilter.destroy ( )
inline
241  {
242 
243  }

◆ doFilter()

void org.keycloak.adapters.servlet.KeycloakOIDCFilter.doFilter ( ServletRequest  req,
ServletResponse  res,
FilterChain  chain 
) throws IOException, ServletException
inline
145  {
146  log.fine("Keycloak OIDC Filter");
147  HttpServletRequest request = (HttpServletRequest) req;
148  HttpServletResponse response = (HttpServletResponse) res;
149 
150  if (shouldSkip(request)) {
151  chain.doFilter(req, res);
152  return;
153  }
154 
155  OIDCServletHttpFacade facade = new OIDCServletHttpFacade(request, response);
156  KeycloakDeployment deployment = deploymentContext.resolveDeployment(facade);
157  if (deployment == null || !deployment.isConfigured()) {
158  response.sendError(403);
159  log.fine("deployment not configured");
160  return;
161  }
162 
163  PreAuthActionsHandler preActions = new PreAuthActionsHandler(new UserSessionManagement() {
164  @Override
165  public void logoutAll() {
166  if (idMapper != null) {
167  idMapper.clear();
168  }
169  }
170 
171  @Override
172  public void logoutHttpSessions(List<String> ids) {
173  log.fine("**************** logoutHttpSessions");
174  //System.err.println("**************** logoutHttpSessions");
175  for (String id : ids) {
176  log.finest("removed idMapper: " + id);
177  idMapper.removeSession(id);
178  }
179 
180  }
181  }, deploymentContext, facade);
182 
183  if (preActions.handleRequest()) {
184  //System.err.println("**************** preActions.handleRequest happened!");
185  return;
186  }
187 
188 
190  OIDCFilterSessionStore tokenStore = new OIDCFilterSessionStore(request, facade, 100000, deployment, idMapper);
191  tokenStore.checkCurrentToken();
192 
193 
194  FilterRequestAuthenticator authenticator = new FilterRequestAuthenticator(deployment, tokenStore, facade, request, 8443);
195  AuthOutcome outcome = authenticator.authenticate();
196  if (outcome == AuthOutcome.AUTHENTICATED) {
197  log.fine("AUTHENTICATED");
198  if (facade.isEnded()) {
199  return;
200  }
201  AuthenticatedActionsHandler actions = new AuthenticatedActionsHandler(deployment, facade);
202  if (actions.handledRequest()) {
203  return;
204  } else {
205  HttpServletRequestWrapper wrapper = tokenStore.buildWrapper();
206  chain.doFilter(wrapper, res);
207  return;
208  }
209  }
210  AuthChallenge challenge = authenticator.getChallenge();
211  if (challenge != null) {
212  log.fine("challenge");
213  challenge.challenge(facade);
214  return;
215  }
216  response.sendError(403);
217 
218  }
KeycloakDeployment resolveDeployment(HttpFacade facade)
Definition: AdapterDeploymentContext.java:86
NodesRegistrationManagement nodesRegistrationManagement
Definition: KeycloakOIDCFilter.java:71
SessionIdMapper idMapper
Definition: KeycloakOIDCFilter.java:69
static final Logger log
Definition: KeycloakOIDCFilter.java:57
AdapterDeploymentContext deploymentContext
Definition: KeycloakOIDCFilter.java:67
boolean shouldSkip(HttpServletRequest request)
Definition: KeycloakOIDCFilter.java:230
void tryRegister(final KeycloakDeployment resolvedDeployment)
Definition: NodesRegistrationManagement.java:42

◆ init()

void org.keycloak.adapters.servlet.KeycloakOIDCFilter.init ( final FilterConfig  filterConfig) throws ServletException
inline
91  {
92  String skipPatternDefinition = filterConfig.getInitParameter(SKIP_PATTERN_PARAM);
93  if (skipPatternDefinition != null) {
94  skipPattern = Pattern.compile(skipPatternDefinition, Pattern.DOTALL);
95  }
96 
97  if (definedconfigResolver != null) {
98  deploymentContext = new AdapterDeploymentContext(definedconfigResolver);
99  log.log(Level.INFO, "Using {0} to resolve Keycloak configuration on a per-request basis.", definedconfigResolver.getClass());
100  } else {
101  String configResolverClass = filterConfig.getInitParameter(CONFIG_RESOLVER_PARAM);
102  if (configResolverClass != null) {
103  try {
104  KeycloakConfigResolver configResolver = (KeycloakConfigResolver) getClass().getClassLoader().loadClass(configResolverClass).newInstance();
105  deploymentContext = new AdapterDeploymentContext(configResolver);
106  log.log(Level.INFO, "Using {0} to resolve Keycloak configuration on a per-request basis.", configResolverClass);
107  } catch (Exception ex) {
108  log.log(Level.FINE, "The specified resolver {0} could NOT be loaded. Keycloak is unconfigured and will deny all requests. Reason: {1}", new Object[]{configResolverClass, ex.getMessage()});
109  deploymentContext = new AdapterDeploymentContext(new KeycloakDeployment());
110  }
111  } else {
112  String fp = filterConfig.getInitParameter(CONFIG_FILE_PARAM);
113  InputStream is = null;
114  if (fp != null) {
115  try {
116  is = new FileInputStream(fp);
117  } catch (FileNotFoundException e) {
118  throw new RuntimeException(e);
119  }
120  } else {
121  String path = "/WEB-INF/keycloak.json";
122  String pathParam = filterConfig.getInitParameter(CONFIG_PATH_PARAM);
123  if (pathParam != null) path = pathParam;
124  is = filterConfig.getServletContext().getResourceAsStream(path);
125  }
126  KeycloakDeployment kd = createKeycloakDeploymentFrom(is);
127  deploymentContext = new AdapterDeploymentContext(kd);
128  log.fine("Keycloak is using a per-deployment configuration.");
129  }
130  }
131  filterConfig.getServletContext().setAttribute(AdapterDeploymentContext.class.getName(), deploymentContext);
132  nodesRegistrationManagement = new NodesRegistrationManagement();
133  }
static final String SKIP_PATTERN_PARAM
Definition: KeycloakOIDCFilter.java:59
NodesRegistrationManagement nodesRegistrationManagement
Definition: KeycloakOIDCFilter.java:71
Pattern skipPattern
Definition: KeycloakOIDCFilter.java:73
static final Logger log
Definition: KeycloakOIDCFilter.java:57
KeycloakDeployment createKeycloakDeploymentFrom(InputStream is)
Definition: KeycloakOIDCFilter.java:135
final KeycloakConfigResolver definedconfigResolver
Definition: KeycloakOIDCFilter.java:75
static final String CONFIG_PATH_PARAM
Definition: KeycloakOIDCFilter.java:65
AdapterDeploymentContext deploymentContext
Definition: KeycloakOIDCFilter.java:67
static final String CONFIG_FILE_PARAM
Definition: KeycloakOIDCFilter.java:63
static final String CONFIG_RESOLVER_PARAM
Definition: KeycloakOIDCFilter.java:61

◆ shouldSkip()

boolean org.keycloak.adapters.servlet.KeycloakOIDCFilter.shouldSkip ( HttpServletRequest  request)
inlineprivate

Decides whether this Filter should skip the given HttpServletRequest based on the configured KeycloakOIDCFilter#skipPattern. Patterns are matched against the requestURI of a request without the context-path. A request for

/myapp/index.html

would be tested with

/index.html

against the skip pattern. Skipped requests will not be processed further by KeycloakOIDCFilter and immediately delegated to the FilterChain.

引数
requestthe request to check
戻り値
true
if the request should not be handled,
false
otherwise.
230  {
231 
232  if (skipPattern == null) {
233  return false;
234  }
235 
236  String requestPath = request.getRequestURI().substring(request.getContextPath().length());
237  return skipPattern.matcher(requestPath).matches();
238  }
Pattern skipPattern
Definition: KeycloakOIDCFilter.java:73

メンバ詳解

◆ CONFIG_FILE_PARAM

final String org.keycloak.adapters.servlet.KeycloakOIDCFilter.CONFIG_FILE_PARAM = "keycloak.config.file"
static

◆ CONFIG_PATH_PARAM

final String org.keycloak.adapters.servlet.KeycloakOIDCFilter.CONFIG_PATH_PARAM = "keycloak.config.path"
static

◆ CONFIG_RESOLVER_PARAM

final String org.keycloak.adapters.servlet.KeycloakOIDCFilter.CONFIG_RESOLVER_PARAM = "keycloak.config.resolver"
static

◆ definedconfigResolver

final KeycloakConfigResolver org.keycloak.adapters.servlet.KeycloakOIDCFilter.definedconfigResolver
private

◆ deploymentContext

AdapterDeploymentContext org.keycloak.adapters.servlet.KeycloakOIDCFilter.deploymentContext
protected

◆ idMapper

SessionIdMapper org.keycloak.adapters.servlet.KeycloakOIDCFilter.idMapper = new InMemorySessionIdMapper()
protected

◆ log

final Logger org.keycloak.adapters.servlet.KeycloakOIDCFilter.log = Logger.getLogger("" + KeycloakOIDCFilter.class)
staticprivate

◆ nodesRegistrationManagement

NodesRegistrationManagement org.keycloak.adapters.servlet.KeycloakOIDCFilter.nodesRegistrationManagement
protected

◆ SKIP_PATTERN_PARAM

final String org.keycloak.adapters.servlet.KeycloakOIDCFilter.SKIP_PATTERN_PARAM = "keycloak.config.skipPattern"
static

◆ skipPattern

Pattern org.keycloak.adapters.servlet.KeycloakOIDCFilter.skipPattern
protected

このクラス詳解は次のファイルから抽出されました: