springboot三种通过代码达到配置的方式 @Configuration

springboot三种通过代码达到配置的方式  @Configuration

 

@Configuration用编码实现配置转化

 

1,单纯的注入配置自己的类,后续类直接io使用(自己加入的配置文件)

 

 

 

ioc,注入

 

@Configuration

public class ValidatorConfig {

 

/**

* 报文数据的验证程序

* @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使用

 

@Autowired

private PacketValidator packetValidator;

 

 

 

2,覆盖默认的装配配置(覆盖方法)    extends  。。。Adpater(复写系统自动装配的配置文件)

 

 

 

@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;

}

 

}

 

 

 

 

 

猜你喜欢

转载自yuhuiblog6338999322098842.iteye.com/blog/2375411
今日推荐