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;
}
}
相关推荐
通过对这些代码的学习和分析,可以更深入地理解SpringBoot与Nacos的整合方式。 以上就是关于"springboot整合nacos完整代码"这个项目的重点内容,这个项目对于理解和实践SpringBoot与Nacos的集成非常有帮助,通过它...
SpringBoot 配置 Apollo 代码实例主要介绍了如何将 Apollo 配置中心集成到 SpringBoot 项目中,通过示例代码详细介绍了配置过程,并提供了详细的代码示例,供大家学习和工作使用。 一、引入 Apollo 依赖 在 ...
在Spring Boot 2.7.6中,配置文件的管理是整个框架的核心功能之一,它使得开发者能够方便地...以上就是Spring Boot 2.7.6读取配置文件的基本方式及其相关知识,希望对你在理解和使用Spring Boot配置管理上有所帮助。
`@SpringBootApplication` 是一个组合注解,包含 `@Configuration`(表示当前类为配置类)、`@EnableAutoConfiguration`(开启自动配置)和 `@ComponentScan`(组件扫描)。通过 `@ComponentScan`,SpringBoot 会...
Spring Boot结合MyBatis Plus(一个MyBatis的增强工具)提供了一种更简洁的集成方式,通过注解即可完成大部分配置。首先,引入MyBatis Plus的依赖,然后在配置类中启用MyBatis Plus: ```java @Configuration ...
总之,Spring Boot的多数据源配置涉及多个层面,包括依赖管理、配置类、数据源对象创建、JPA实体管理工厂、事务管理器以及业务代码中的数据源选择。通过合理配置,我们可以轻松地实现对多个数据库的管理和操作。
SpringBoot的核心思想是“约定优于配置”,它通过自动配置的方式,减少了繁杂的XML配置文件,使得开发变得更加高效。此外,SpringBoot内置了Tomcat服务器,使得我们可以直接运行jar包来启动服务,无需额外部署。 在...
在Spring Boot项目中,我们经常会遇到需要连接多个数据库的需求,比如主从数据库、读写分离等场景。本配置示例将详细介绍如何在Spring ...通过这种方式,我们可以灵活地管理和操作多个数据库,满足复杂的应用场景需求。
通过本文,我们了解了SpringBoot的基础知识和实践经验,包括SpringBoot的发展历程、Java配置方式、注解的使用、HttpClient的配置等。 在实践中,我们可以使用SpringBoot来开发基于Web的应用程序,从而提高开发效率...
在SpringBoot项目中,这些配置可以通过@Configuration注解的类来实现,例如设置数据源(DataSource)和事务管理器(PlatformTransactionManager)。 3. **Oracle数据库连接**:SpringBoot支持多种数据库,包括...
在Spring Boot框架中,`@Configuration`注解是核心组件之一,它用于标记一个类作为配置类,使得我们可以使用Java配置来替代XML配置。在这个"自定义@Configuration配置类启用开关.zip"项目中,我们很显然会看到如何...
它集成了大量常用的第三方库配置,如数据源、JPA、MVC、security 等,使得开发者可以快速地进行开发而无需手动配置。 在“springBoot 的代码示例”中,我们主要会接触到以下几个核心知识点: 1. **Druid 数据源**...
通过以上讲解,我们可以看到"springboot论坛项目代码注释"不仅涵盖了 Spring Boot 的核心技术,还涉及到实际项目开发中的常见模块。对于学习和实践 Spring Boot 开发者来说,这是一个极佳的参考资源。
SpringBoot的核心特性之一是起步驱动配置(Starter POMs),它允许开发者通过引入特定的依赖来快速配置和启用服务。在源代码中,可以看到`pom.xml`文件中如何声明这些起步依赖,如`spring-boot-starter-web`用于Web...
接下来,通过Java配置或者@Configuration注解的类来创建JetCache实例。在SpringBoot中,你可以创建一个名为CacheConfig的配置类,然后使用@Bean注解来定义JetCache实例: ```java @Configuration public class ...
1. 配置第三方框架:在 Spring Boot 项目中,我们可以使用 @Configuration 和 @Bean 注解来配置第三方框架,例如 Shiro 框架。 2. 注册 Bean:我们可以使用 @Bean 注解来注册 Bean 到 Spring 容器中,以便其他组件...
3. **起步依赖**:SpringBoot的starter POMs提供了一种快速配置Spring及第三方库的方式。例如,`spring-boot-starter-web`包含了开发Web应用所需的全部依赖。 4. **命令行接口(CLI)**:SpringBoot提供了命令行...
在Spring Boot应用中,`@Configuration`注解用于标记一个类作为配置类,它提供了声明式的方式来装配Bean。在标题提到的“自定义@Configuration配置类启用开关第二个版本.zip”中,我们可以推测这是一个关于如何在...
3. **自动配置(Auto Configuration)**:SpringBoot会根据类路径中的类和jar文件自动配置Spring上下文。例如,如果检测到HSQLDB数据库驱动在类路径中,那么它将自动配置一个内存数据库连接。 4. **Actuator**:...
通过手写SpringBoot代码,我们可以更深入地了解其工作原理,更好地掌握SpringBoot的配置和使用技巧。这包括自动配置的理解、条件化注解的应用、RESTful API的设计以及配置文件的管理。同时,这也有助于我们在实际...