MaxKeyMvcConfig.java 9.3 KB
Newer Older
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/*
 * Copyright [2020] [MaxKey of copyright http://www.maxkey.top]
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 

M
MaxKey 已提交
18
package org.maxkey.autoconfigure;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
19

M
AppList  
MaxKey 已提交
20 21
import java.util.List;

M
MaxKey 已提交
22
import org.maxkey.authn.provider.AbstractAuthenticationProvider;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
23 24
import org.maxkey.authn.support.basic.BasicEntryPoint;
import org.maxkey.authn.support.httpheader.HttpHeaderEntryPoint;
M
MaxKey 已提交
25 26
import org.maxkey.authn.support.kerberos.HttpKerberosEntryPoint;
import org.maxkey.authn.support.kerberos.KerberosService;
M
AppList  
MaxKey 已提交
27
import org.maxkey.authn.web.CurrentUserMethodArgumentResolver;
M
MaxKey 已提交
28
import org.maxkey.authn.web.interceptor.PermissionInterceptor;
M
MaxKey 已提交
29
import org.maxkey.configuration.ApplicationConfig;
M
MaxKey 已提交
30 31 32
import org.maxkey.web.interceptor.HistorySignOnAppInterceptor;
import org.maxkey.web.interceptor.HistoryLogsInterceptor;
import org.maxkey.web.interceptor.SingleSignOnInterceptor;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
33 34 35 36
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
M
MaxKey 已提交
37
import org.springframework.boot.autoconfigure.AutoConfiguration;
M
AppList  
MaxKey 已提交
38 39
import org.springframework.context.annotation.Bean;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
40 41 42 43 44 45
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@EnableWebMvc
M
MaxKey 已提交
46
@AutoConfiguration
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
47 48
public class MaxKeyMvcConfig implements WebMvcConfigurer {
    private static final  Logger _logger = LoggerFactory.getLogger(MaxKeyMvcConfig.class);
M
MaxKey 已提交
49 50 51 52 53 54 55 56 57
   
    @Value("${maxkey.login.basic.enable:false}")
    private boolean basicEnable;
    
    @Value("${maxkey.login.httpheader.enable:false}")
    private boolean httpHeaderEnable;
    
    @Value("${maxkey.login.httpheader.headername:iv-user}")
    private String httpHeaderName;
58
    
M
MaxKey 已提交
59 60 61 62 63 64
    @Autowired
  	ApplicationConfig applicationConfig;
    
    @Autowired
    AbstractAuthenticationProvider authenticationProvider ;
    
M
MaxKey 已提交
65 66 67
    @Autowired
    KerberosService kerberosService;
    
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
68
    @Autowired
M
MaxKey 已提交
69
    PermissionInterceptor permissionInterceptor;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
70 71
    
    @Autowired
M
MaxKey 已提交
72
    HistoryLogsInterceptor historyLogsInterceptor;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
73 74 75
    
    
    @Autowired
M
MaxKey 已提交
76
    SingleSignOnInterceptor singleSignOnInterceptor;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
77 78
    
    @Autowired
M
MaxKey 已提交
79
    HistorySignOnAppInterceptor historySignOnAppInterceptor;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
80 81 82
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
M
MaxKey 已提交
83
    	_logger.debug("add Resource Handlers");
84
        _logger.debug("add statics");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
85 86
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
87
        _logger.debug("add templates");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
88 89
        registry.addResourceHandler("/templates/**")
                .addResourceLocations("classpath:/templates/");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
90
        
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
91
        _logger.debug("add swagger");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
92 93 94 95 96
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
        
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
97
        _logger.debug("add knife4j");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
98 99
        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
100
        
M
MaxKey 已提交
101
        _logger.debug("add Resource Handler finished .");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
102 103 104 105 106 107
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //addPathPatterns 用于添加拦截规则 , 先把所有路径都加入拦截, 再一个个排除
        //excludePathPatterns 表示改路径不用拦截
M
MaxKey 已提交
108
        
M
MaxKey 已提交
109
        _logger.debug("add Http Kerberos Entry Point");
M
MaxKey 已提交
110 111 112 113 114
        registry.addInterceptor(new HttpKerberosEntryPoint(
    			authenticationProvider,kerberosService,applicationConfig,true))
    		.addPathPatterns("/login");
        
        
M
MaxKey 已提交
115 116 117
        if(httpHeaderEnable) {
            registry.addInterceptor(new HttpHeaderEntryPoint(httpHeaderName,httpHeaderEnable))
                    .addPathPatterns("/*");
M
MaxKey 已提交
118
            _logger.debug("add Http Header Entry Point");
M
MaxKey 已提交
119 120 121 122 123
        }
        
        if(basicEnable) {
            registry.addInterceptor(new BasicEntryPoint(basicEnable))
                    .addPathPatterns("/*");
M
MaxKey 已提交
124
            _logger.debug("add Basic Entry Point");
M
MaxKey 已提交
125 126
        }
        
M
MaxKey 已提交
127 128
        //for frontend
        registry.addInterceptor(permissionInterceptor)
M
3.5.0  
MaxKey 已提交
129
                .addPathPatterns("/config/**")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
130
                .addPathPatterns("/historys/**")
M
AppList  
MaxKey 已提交
131 132
                .addPathPatterns("/access/session/**")
                .addPathPatterns("/access/session/**/**")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
133
                .addPathPatterns("/appList")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
134 135
                .addPathPatterns("/appList/**")
                .addPathPatterns("/socialsignon/**")
M
MaxKey 已提交
136 137
                .addPathPatterns("/authz/credential/**")
                .addPathPatterns("/authz/oauth/v20/approval_confirm/**")
M
MaxKey 已提交
138
        		.addPathPatterns("/authz/oauth/v20/authorize/approval/**")
M
MaxKey 已提交
139 140 141
        		.addPathPatterns("/logon/oauth20/bind/**")
        		.addPathPatterns("/logout")
                .addPathPatterns("/logout/**")
M
MaxKey 已提交
142
                .addPathPatterns("/authz/refused")
M
MaxKey 已提交
143
                ;
M
MaxKey 已提交
144
        
M
MaxKey 已提交
145 146 147 148 149 150 151 152 153
        _logger.debug("add Permission Interceptor");
        
        registry.addInterceptor(historyLogsInterceptor)
                .addPathPatterns("/config/changePassword/**")
                ;
        _logger.debug("add historyLogs Interceptor");

        //for Single Sign On
        registry.addInterceptor(singleSignOnInterceptor)
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
154
                .addPathPatterns("/authz/basic/*")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
155
                //Form based
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
156
                .addPathPatterns("/authz/formbased/*")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
157
                //Token based
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
158
                .addPathPatterns("/authz/tokenbased/*")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
159 160
                //JWT
                .addPathPatterns("/authz/jwt/*")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
161
                //SAML
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
162 163
                .addPathPatterns("/authz/saml20/idpinit/*")
                .addPathPatterns("/authz/saml20/assertion")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
164 165
                .addPathPatterns("/authz/saml20/assertion/")
                //CAS
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
166 167
                .addPathPatterns("/authz/cas/*")
                .addPathPatterns("/authz/cas/*/*")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
168 169
                .addPathPatterns("/authz/cas/login")
                .addPathPatterns("/authz/cas/login/")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
170
                .addPathPatterns("/authz/cas/granting/*")
171
                //cas1.0 validate
172
                .excludePathPatterns("/authz/cas/validate")
173
                //cas2.0 Validate
174 175
                .excludePathPatterns("/authz/cas/serviceValidate")
                .excludePathPatterns("/authz/cas/proxyValidate")
M
MaxKey 已提交
176
                .excludePathPatterns("/authz/cas/proxy")
177
                //cas3.0 Validate
178 179
                .excludePathPatterns("/authz/cas/p3/serviceValidate")
                .excludePathPatterns("/authz/cas/p3/proxyValidate")
M
MaxKey 已提交
180
                .excludePathPatterns("/authz/cas/p3/proxy")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
181 182 183
                //rest
                .excludePathPatterns("/authz/cas/v1/tickets")
                .excludePathPatterns("/authz/cas/v1/tickets/*")
184
                
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
185
                //OAuth
M
MaxKey 已提交
186 187
                .addPathPatterns("/authz/oauth/v20/authorize")
                .addPathPatterns("/authz/oauth/v20/authorize/*")
188
                
M
MaxKey 已提交
189 190 191 192
                //OAuth TENCENT_IOA
                .addPathPatterns("/oauth2/authorize")
                .addPathPatterns("/oauth2/authorize/*")
                
193 194 195
                //online ticket Validate
                .excludePathPatterns("/onlineticket/ticketValidate")
                .excludePathPatterns("/onlineticket/ticketValidate/*")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
196
        ;
M
MaxKey 已提交
197
        _logger.debug("add Single SignOn Interceptor");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
198
        
M
MaxKey 已提交
199
        registry.addInterceptor(historySignOnAppInterceptor)
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
200 201
                .addPathPatterns("/authz/basic/*")
                .addPathPatterns("/authz/ltpa/*")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
202
                //Extend api
M
MaxKey 已提交
203
                .addPathPatterns("/authz/api/*")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
204
                //Form based
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
205
                .addPathPatterns("/authz/formbased/*")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
206
                //Token based
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
207
                .addPathPatterns("/authz/tokenbased/*")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
208 209 210
                //JWT
                .addPathPatterns("/authz/jwt/*")
                //SAML
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
211 212
                .addPathPatterns("/authz/saml20/idpinit/*")
                .addPathPatterns("/authz/saml20/assertion")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
213
                //CAS
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
214
                .addPathPatterns("/authz/cas/granting")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
215
                //OAuth
M
MaxKey 已提交
216
                .addPathPatterns("/authz/oauth/v20/approval_confirm")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
217
        ;
M
MaxKey 已提交
218
        _logger.debug("add history SignOn App Interceptor");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
219
        
M
MaxKey 已提交
220

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
221
    }
M
MaxKey 已提交
222
    
M
AppList  
MaxKey 已提交
223 224 225 226 227 228 229 230 231 232
    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        argumentResolvers.add(currentUserMethodArgumentResolver());
    }
    
    @Bean
    public CurrentUserMethodArgumentResolver currentUserMethodArgumentResolver() {
        return new CurrentUserMethodArgumentResolver();
    }
    
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
233
}