【发布时间】:2018-11-06 23:10:58
【问题描述】:
我有一个使用 Spring Security 的角色授权的 Spring Boot 应用程序。包括自定义过滤器在内的安全设置和配置存储在单个包内的 common 模块中。要在我的应用程序中使用来自common 模块的其他包,我需要使用@ComponentScan 并指定要扫描的包,但如果不包含安全包,Spring 似乎仍然会注册它并实现安全配置和过滤器。这是为什么?
项目结构:
module
|common
| |src/main/java
| | |com.company.product.common
| | | |redis
| | | |es
| | | |spring (the security configuration)
|main_module
| |src/main/java
| | |com.company.product.service
| | | |ServiceMainApp.java
配置类:
package com.company.product.common.spring.configuration;
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private SecurityFilter securityFilter;
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.addFilterAfter(securityFilter, BasicAuthenticationFilter.class).csrf().disable();
}
}
@Configuration
public class MethodSecurityConfiguration extends GlobalMethodSecurityConfiguration {
@Value("${service.security.enabled:true}")
private boolean securityEnabled;
@Override
protected MethodSecurityMetadataSource customMethodSecurityMetadataSource() {
return securityEnabled ? new SecuredAnnotationSecurityMetadataSource() : null;
}
}
主类:
@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = {"com.company.product.service", "com.company.product.common.redis"})
@EnableCaching
public class ServiceMainApp {
public static void main(String[] args) {
SpringApplication.run(ServiceMainApp.class, args);
}
}
【问题讨论】:
-
通用模块的包结构是什么,消费应用中主类的包结构是什么?
-
@AndrewS,普通(
spring有安全配置):com.company.portal.common.springcom.company.portal.common.rediscom.company.portal.common.esmain:com.company.portal.customer -
@Robert 你知道了吗?
标签: java spring spring-boot spring-security