2 * Copyright (c) 2018 Red Hat, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.aaa.shiro.web.env;
10 import org.apache.shiro.web.env.EnvironmentLoaderListener;
11 import org.eclipse.jetty.servlets.CrossOriginFilter;
12 import org.opendaylight.aaa.shiro.filters.AAAShiroFilter;
13 import org.opendaylight.aaa.web.FilterDetails;
14 import org.opendaylight.aaa.web.WebContext;
15 import org.opendaylight.aaa.web.WebContextBuilder;
16 import org.opendaylight.aaa.web.WebContextSecurer;
19 * Secures a {@link WebContext} using Shiro.
21 * @author Michael Vorburger.ch
23 public class ShiroWebContextSecurer implements WebContextSecurer {
25 private final EnvironmentLoaderListener shiroEnvironmentLoaderListener;
27 public ShiroWebContextSecurer(EnvironmentLoaderListener shiroEnvironmentLoaderListener) {
28 this.shiroEnvironmentLoaderListener = shiroEnvironmentLoaderListener;
32 public void requireAuthentication(WebContextBuilder webContextBuilder, boolean asyncSupported,
33 String... urlPatterns) {
34 webContextBuilder.addListener(shiroEnvironmentLoaderListener)
36 // AAA filter in front of these REST web services as well as for moon endpoints
37 .addFilter(FilterDetails.builder()
38 .filter(new AAAShiroFilter())
39 .addUrlPatterns(urlPatterns)
40 .asyncSupported(asyncSupported)
44 .addFilter(FilterDetails.builder()
45 .filter(new CrossOriginFilter())
46 .addUrlPatterns(urlPatterns)
47 .asyncSupported(asyncSupported)
48 .putInitParam("allowedOrigins", "*")
49 .putInitParam("allowedMethods", "GET,POST,OPTIONS,DELETE,PUT,HEAD")
50 .putInitParam("allowedHeaders", "origin, content-type, accept, authorization")