Springboot three ways to achieve configuration through code @Configuration

Springboot three ways to achieve configuration through code @Configuration

 

@Configuration implements configuration transformation with encoding

 

1. Simply inject and configure your own class, and the subsequent classes will be used directly by io (the configuration file added by yourself)

 

 

 

ioc, inject

 

@Configuration

public class ValidatorConfig {

 

/**

* Verification procedure of message data

* @return

*/

@Bean

public Validator validator(){

Validator validator = Validation.byProvider( HibernateValidator.class )

       .configure()

       .failFast( true )

       .buildValidatorFactory()

       .getValidator();

return validator;

}

 

@Bean

public PacketValidator packetValidator(){

return new PacketValidator();

}

 

 

}

 

 

di use

 

@Autowired

private PacketValidator packetValidator;

 

 

 

2. Override the default assembly configuration (override method) extends . . . Adpater (rewrite the configuration file automatically assembled by the system)

 

 

 

@Configuration

public class SettWebMvcConfiger extends WebMvcConfigurerAdapter {

 

        @Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

//registry.addResourceHandler("/js/");

//registry.addResourceHandler("/static/");

}

}

 

 

 

 

 

 

3,覆盖默认的配置(覆盖bean,覆盖方法),extends   。。。Adapter,并且注入(复写系统自动装配的配置文件)

 

 

 

@EnableWebSecurity

@Configuration

public class SecurityConfig extends WebSecurityConfigurerAdapter {

 

@Autowired

private CasProperties casProperties;

 

/** 定义认证用户信息获取来源,密码校验规则等 */

@Override

protected void configure(AuthenticationManagerBuilder auth) throws Exception {

super.configure(auth);

auth.authenticationProvider(casAuthenticationProvider());

 

 

}

 

/** 定义安全策略 */

@Override

protected void configure(HttpSecurity http) throws Exception {

http.authorizeRequests()// 配置安全策略

.antMatchers("/","/hello","/static/**/*","/public/**/*","/js/**/*","/account/**/*").permitAll()//定义/请求不需要验证

.antMatchers("/*").permitAll()

// .antMatchers("/parj").permitAll()

// .antMatchers("/pacj").permitAll()

//.anyRequest().authenticated()// 其余的所有请求都需要验证

.and().logout().permitAll()// 定义logout不需要验证

.and().formLogin()

.and().csrf().ignoringAntMatchers("/*");

 

 

http.exceptionHandling().authenticationEntryPoint(casAuthenticationEntryPoint()).and().addFilter(casAuthenticationFilter()).addFilterBefore(casLogoutFilter(), LogoutFilter.class)

.addFilterBefore(singleSignOutFilter(), CasAuthenticationFilter.class);

 

}

 

/** 认证的入口 */

@Bean

public CasAuthenticationEntryPoint casAuthenticationEntryPoint() {

CasAuthenticationEntryPoint casAuthenticationEntryPoint = new CasAuthenticationEntryPoint();

casAuthenticationEntryPoint.setLoginUrl(casProperties.getCasServerLoginUrl());

casAuthenticationEntryPoint.setServiceProperties(serviceProperties());

return casAuthenticationEntryPoint;

}

 

/** 指定service相关信息 */

@Bean

public ServiceProperties serviceProperties() {

ServiceProperties serviceProperties = new ServiceProperties();

serviceProperties.setService(casProperties.getAppServerUrl() + casProperties.getAppLoginUrl());

serviceProperties.setAuthenticateAllArtifacts(true);

return serviceProperties;

}

 

/** CAS认证过滤器 */

@Bean

public CasAuthenticationFilter casAuthenticationFilter() throws Exception {

CasAuthenticationFilter casAuthenticationFilter = new CasAuthenticationFilter();

casAuthenticationFilter.setAuthenticationManager(authenticationManager());

casAuthenticationFilter.setFilterProcessesUrl(casProperties.getAppLoginUrl());

return casAuthenticationFilter;

}

 

/** cas认证Provider */

@Bean

public CasAuthenticationProvider casAuthenticationProvider() {

CasAuthenticationProvider casAuthenticationProvider = new CasAuthenticationProvider();

casAuthenticationProvider.setAuthenticationUserDetailsService(customUserDetailsService());

// casAuthenticationProvider.setUserDetailsService(customUserDetailsService());//这里只是接口类型,实现的接口不一样,都可以的。

casAuthenticationProvider.setServiceProperties(serviceProperties());

casAuthenticationProvider.setTicketValidator(cas20ServiceTicketValidator());

casAuthenticationProvider.setKey("casAuthenticationProviderKey");

return casAuthenticationProvider;

}

 

/*

* @Bean publicUserDetailsServicecustomUserDetailsService(){

* returnnewCustomUserDetailsService(); }

*/

 

/** 用户自定义的AuthenticationUserDetailsService */

@Bean

public AuthenticationUserDetailsService<CasAssertionAuthenticationToken> customUserDetailsService() {

return new CustomUserDetailsService();

}

 

@Bean

public TicketValidator cas20ServiceTicketValidator() {

return new Cas20ServiceTicketValidator(casProperties.getCasServerUrl());

}

 

/** 单点登出过滤器 */

@Bean

public SingleSignOutFilter singleSignOutFilter() {

SingleSignOutFilter singleSignOutFilter = new SingleSignOutFilter();

singleSignOutFilter.setCasServerUrlPrefix(casProperties.getCasServerUrl());

singleSignOutFilter.setIgnoreInitConfiguration(true);

return singleSignOutFilter;

}

 

/** 请求单点退出过滤器 */

@Bean

public LogoutFilter casLogoutFilter() {

LogoutFilter logoutFilter = new LogoutFilter(casProperties.getCasServerLogoutUrl(), new SecurityContextLogoutHandler());

logoutFilter.setFilterProcessesUrl(casProperties.getAppLogoutUrl());

return logoutFilter;

}

 

}

 

 

 

 

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326328475&siteId=291194637