2 * ============LICENSE_START==========================================
4 * ===================================================================
5 * Copyright (c) 2017 AT&T Intellectual Property
6 * ===================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 * ============LICENSE_END=============================================
20 * ====================================================================
23 package org.onap.music;
25 import javax.servlet.Filter;
26 import javax.servlet.FilterChain;
27 import javax.servlet.ServletException;
28 import javax.servlet.ServletRequest;
29 import javax.servlet.ServletResponse;
31 import org.onap.aaf.cadi.PropAccess;
32 import org.onap.music.authentication.CadiAuthFilter;
33 import org.onap.music.authentication.MusicAuthorizationFilter;
34 import org.onap.music.eelf.logging.EELFLoggerDelegate;
35 import org.onap.music.eelf.logging.MusicLoggingServletFilter;
36 import org.onap.music.lockingservice.cassandra.LockCleanUpDaemon;
37 import org.onap.music.main.MusicUtil;
38 import org.onap.music.main.PropertiesLoader;
39 import org.springframework.beans.factory.annotation.Autowired;
40 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
41 import org.springframework.boot.autoconfigure.SpringBootApplication;
42 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
43 import org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration;
44 import org.springframework.boot.builder.SpringApplicationBuilder;
45 import org.springframework.boot.web.servlet.FilterRegistrationBean;
46 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
47 import org.springframework.context.annotation.Bean;
48 import org.springframework.context.annotation.ComponentScan;
49 import org.springframework.context.annotation.DependsOn;
50 import org.springframework.scheduling.annotation.EnableScheduling;
51 import org.springframework.web.context.request.RequestContextListener;
53 @SpringBootApplication(scanBasePackages = { "org.onap.music.rest"})
54 @EnableAutoConfiguration(exclude = { CassandraDataAutoConfiguration.class })
55 @ComponentScan(value = { "org.onap.music" })
57 public class MusicApplication extends SpringBootServletInitializer {
59 private static final String KEYSPACE_PATTERN = "/v2/keyspaces/*";
60 private static final String LOCKS_PATTERN = "/v2/locks/*";
61 private static final String Q_PATTERN = "/v2/priorityq/*";
64 private PropertiesLoader propertyLoader;
65 private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicApplication.class);
68 public static void main(String[] args) {
69 new MusicApplication().configure(new SpringApplicationBuilder(MusicApplication.class)).run(args);
71 LockCleanUpDaemon daemon = new LockCleanUpDaemon();
72 daemon.setDaemon(true);
77 protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
79 return application.sources(MusicApplication.class);
82 @Bean("loadProperties")
83 public void loadProperties() {
84 propertyLoader.loadProperties();
89 @DependsOn("loadProperties")
90 public PropAccess propAccess() {
91 if (MusicUtil.getIsCadi()) {
92 return new PropAccess(new String[] {
93 "cadi_prop_files=/opt/app/music/etc/cadi.properties" });
99 @Bean(name = "cadiFilter")
100 @DependsOn("loadProperties")
101 public Filter cadiFilter() throws ServletException {
102 propertyLoader.loadProperties();
103 if (MusicUtil.getIsCadi()) {
104 PropAccess propAccess = propAccess();
105 return new CadiAuthFilter(propAccess);
107 return (ServletRequest request, ServletResponse response, FilterChain chain) -> {
108 // do nothing for now.
114 * Added for capturing custom header values from client.
116 * order is set to 1 for this filter
121 * @throws ServletException
123 @Bean(name="logFilter")
124 @DependsOn("loadProperties")
125 public FilterRegistrationBean<Filter> loggingFilterRegistration() throws ServletException {
126 logger.info("loggingFilterRegistration called for log filter..");
127 propertyLoader.loadProperties();
128 FilterRegistrationBean<Filter> frb = new FilterRegistrationBean<>();
129 frb.setFilter(new MusicLoggingServletFilter());
135 frb.setName("logFilter");
141 @DependsOn("loadProperties")
142 public FilterRegistrationBean<Filter> cadiFilterRegistration() throws ServletException {
143 logger.info("cadiFilterRegistration called for cadi filter..");
144 FilterRegistrationBean<Filter> frb = new FilterRegistrationBean<>();
145 frb.setFilter(cadiFilter());
146 if (MusicUtil.getIsCadi()) {
153 frb.addUrlPatterns("/v0/test");
155 frb.setName("cadiFilter");
162 * Added for Authorization using CADI
167 * @throws ServletException
170 @DependsOn("loadProperties")
171 public FilterRegistrationBean<Filter> cadiFilterRegistrationForAuth() throws ServletException {
172 logger.info("cadiFilterRegistrationForAuth called for cadi auth filter..");
173 FilterRegistrationBean<Filter> frb = new FilterRegistrationBean<>();
174 frb.setFilter(cadiMusicAuthFilter());
176 if (MusicUtil.getIsCadi()) {
183 frb.addUrlPatterns("/v0/test");
185 frb.setName("cadiMusicAuthFilter");
190 @Bean(name = "cadiMusicAuthFilter")
191 @DependsOn("loadProperties")
192 public Filter cadiMusicAuthFilter() throws ServletException {
193 propertyLoader.loadProperties();
194 if (MusicUtil.getIsCadi()) {
195 return new MusicAuthorizationFilter();
197 return (ServletRequest request, ServletResponse response, FilterChain chain) -> {
198 // do nothing for now.
204 @ConditionalOnMissingBean(RequestContextListener.class)
205 public RequestContextListener requestContextListener() {
206 return new RequestContextListener();