importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.core.Ordered;importorg.springframework.core.annotation.Order;importorg.springframework.core.io.FileSystemResource;importorg.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;importorg.springframework.security.config.annotation.web.builders.HttpSecurity;importorg.springframework.security.config.annotation.web.configuration.EnableWebSecurity;importorg.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;importorg.springframework.security.kerberos.authentication.KerberosAuthenticationProvider;importorg.springframework.security.kerberos.authentication.KerberosServiceAuthenticationProvider;importorg.springframework.security.kerberos.authentication.sun.SunJaasKerberosClient;importorg.springframework.security.kerberos.authentication.sun.SunJaasKerberosTicketValidator;importorg.springframework.security.kerberos.web.authentication.SpnegoAuthenticationProcessingFilter;importorg.springframework.security.kerberos.web.authentication.SpnegoEntryPoint;importorg.springframework.security.web.authentication.www.BasicAuthenticationFilter;@Configuration@EnableWebSecurity@Order(Ordered.HIGHEST_PRECEDENCE)//可以加 可以不加看自己代码是否报错publicclassMyWebSecurityConfigurationextendsWebSecurityConfigurerAdapter{@Overrideprotectedvoidconfigure(HttpSecurity http)throwsException{http.csrf().disable().exceptionHandling().authenticationEntryPoint(spnegoEntryPoint())//.accessDeniedPage("/login").and().headers().frameOptions().sameOrigin().and().authorizeRequests().antMatchers("/resources/**","/test2/**").permitAll().anyRequest().authenticated().and().formLogin()//.loginPage("/login").permitAll().and().logout().permitAll().and().addFilterBefore(spnegoAuthenticationProcessingFilter(),BasicAuthenticationFilter.class);}@Overridepublicvoidconfigure(AuthenticationManagerBuilder auth)throwsException{auth.authenticationProvider(kerberosAuthenticationProvider()).authenticationProvider(kerberosServiceAuthenticationProvider());}@BeanpublicKerberosAuthenticationProviderkerberosAuthenticationProvider(){KerberosAuthenticationProvider provider =newKerberosAuthenticationProvider();SunJaasKerberosClient client =newSunJaasKerberosClient();client.setDebug(true);provider.setKerberosClient(client);provider.setUserDetailsService(dummyUserDetailsService());return provider;}@BeanpublicSpnegoEntryPointspnegoEntryPoint(){returnnewSpnegoEntryPoint();}@BeanpublicSpnegoAuthenticationProcessingFilterspnegoAuthenticationProcessingFilter(){SpnegoAuthenticationProcessingFilter filter =newSpnegoAuthenticationProcessingFilter();try{filter.setAuthenticationManager(authenticationManagerBean());}catch(Exception e){}return filter;}@BeanpublicKerberosServiceAuthenticationProviderkerberosServiceAuthenticationProvider(){KerberosServiceAuthenticationProvider provider =newKerberosServiceAuthenticationProvider();provider.setTicketValidator(sunJaasKerberosTicketValidator());provider.setUserDetailsService(dummyUserDetailsService());return provider;}@BeanpublicSunJaasKerberosTicketValidatorsunJaasKerberosTicketValidator(){SunJaasKerberosTicketValidator ticketValidator =newSunJaasKerberosTicketValidator();ticketValidator.setServicePrincipal("设置名字一般是COM结尾");ticketValidator.setKeyTabLocation(newFileSystemResource("kerbtest05文件地址"));ticketValidator.setDebug(true);//Turn off when it will works properly,return ticketValidator;}@BeanpublicDummyUserDetailsServicedummyUserDetailsService(){returnnewDummyUserDetailsService();}}