我在初始化程序中有以下代码:
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Filter[] getServletFilters() {
DelegatingFilterProxy shiroFilter = new DelegatingFilterProxy("shiroFilter");
shiroFilter.setTargetFilterLifecycle(true);
return new Filter[]{new CorsFilter(),shiroFilter};
}
}
Run Code Online (Sandbox Code Playgroud)
我想CorsFilter先被执行ShiroFilter.但是,Spring文档并未说明执行过滤器的顺序取决于它们在返回数组中的顺序.
如果是,有人可以澄清一下吗?如果没有,有人建议如何做,我保证过滤器的执行顺序?
我构建了一个没有任何XML的java配置的Spring MVC应用程序.我可以在笔记本电脑上部署和启动应用程序,没有任何问题.但是当我尝试在我的testserver(tomcat 7)上部署我的应用程序时,我收到以下消息:
HTTP Status 404 - The requested resource (/[application context]/) is not available.
Run Code Online (Sandbox Code Playgroud)
我使用Eclipse Maven插件构建我的应用程序.是否可以在没有web.xml的情况下部署应用程序,如果没有,哪个是我真正需要的基本web.xml?
Maven WAR插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>${maven.war.plugin.version}</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
WebAppInitializer:
@Order(value = 1)
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
}
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { HibernateConfig.class, SecurityConfig.class, HibernateDaoConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { WebAppConfig.class };
}
@Override
protected String[] getServletMappings() {
return new …Run Code Online (Sandbox Code Playgroud) 问题是:我可以成功注册过滤器,但不知道如何使用此特定配置设置映射URL.
这是我的班级:
public class WebInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{AppConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebConfig.class};
}
@Override
protected Filter[] getServletFilters() {
return new Filter[]{
new DelegatingFilterProxy("springSecurityFilterChain"),
new DelegatingFilterProxy("customFilter")
};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
Run Code Online (Sandbox Code Playgroud)
PD我用它做过WebApplicationInitializer,但我想用AbstractAnnotationConfigDispatcherServletInitializer.
我想使用Java Config在Spring Boot中定义类似于此XML的内容.
<http pattern="/webservices/**" security="none"/>
我需要一种不同的方法来保护它们,不能进行表单登录.保护他们将在以后到来.现在,我想停止使用http.formLogin()来保护它们.
我已经覆盖了WebSecurityConfigurerAdapter.configure().我找不到要说的API,像这样:
http.securityNone().antMatchers("/webservices")
这是我的configure()方法:
@Override
protected void configure(HttpSecurity http) throws Exception
http.csrf().disable();
http.headers().frameOptions().disable();
http.authorizeRequests()
.antMatchers("/resources/**",
//"/services/**", THIS LOGS IN AUTOMATICALLY AS 'ANONYMOUS'. NO GOOD!
//"/remoting/**", THIS LOGS IN AUTOMATICALLY AS 'ANONYMOUS'. NO GOOD!
"/pages/login",
"/pages/loginFailed").permitAll()
// Only authenticated can access these URLs and HTTP METHODs
.antMatchers("/secured/**").authenticated()
.antMatchers(HttpMethod.HEAD,"/**").authenticated()
.antMatchers(HttpMethod.GET,"/**").authenticated()
.antMatchers(HttpMethod.POST,"/**").authenticated()
.antMatchers(HttpMethod.PUT,"/**").authenticated()
.antMatchers(HttpMethod.DELETE,"/**").authenticated();
// Accept FORM-based authentication
http.formLogin()
.failureUrl("/pages/loginFailed")
.defaultSuccessUrl("/")
.loginPage("/pages/login")
.permitAll()
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/pages/logout"))
.logoutSuccessUrl("/pages/login")
.permitAll();
http.formLogin().successHandler(new AppLoginSuccessHandler());
}
Run Code Online (Sandbox Code Playgroud) 我们的应用程序中有几个DB连接,因此JPA有几个配置.配置只有架构名称,数据库主机名等不同.其余如休眠设置等(通常)相同.这导致多个HibernateJpaVendorAdapter,数据源等bean.它们都需要不同的名称,以免它们发生碰撞.我们目前手动设置如下:
@Configuration
@Bean
public class FooDbConfig {
public DataSource fooDataSource() {
return ...;
}
// ... more beans like HibernateJpaVendorAdapter etc.
}
@Configuration
@Bean
public class BarDbConfig {
public DataSource barDataSource() {
return ...;
}
// ... more beans like HibernateJpaVendorAdapter etc.
}
Run Code Online (Sandbox Code Playgroud)
这当然是非常脆弱的维护.
我们想要一些java配置"Configurer",通过传递bean名称前缀来创建必要bean的设置.然后它应该创建具有不同名称的所有必需的bean(数据源等),前缀为给定的前缀(例如"fooDataSource"和"barDataSource").
这样做的好方法是什么?
我怎么能用java配置以编程方式生成bean别名?
我有这个类来启动spring-cloud配置服务器.这是一个spring-boot应用程序.
@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
public class ConfigServerApplication {
public static void main( String[] args ) {
SpringApplication.run( ConfigServerApplication.class, args );
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序运行正常,我所有的单元测试都很好.但是,在我们的竹子管道中,它将初始化一个声纳过程来分析代码.我们不断收到这些小警告,表明以下内容:
Utility classes should not have a public constructor
Run Code Online (Sandbox Code Playgroud)
我知道这是一个小问题,但我的任务是从代码中删除这些.
理想情况下,您可以将类标记为final并提供私有构造函数,或者所有搜索都提供解决方案.但是,Spring Configuration类不能成为final,也不能有私有构造函数.
任何想法如何解决这个问题?
spring spring-boot spring-java-config sonarqube spring-cloud
如何使用spring java config设置值为allow-from的X-Frame-Options响应头?
http.headers().disable()
.addHeaderWriter(new XFrameOptionsHeaderWriter(
new WhiteListedAllowFromStrategy(
Arrays.asList("https://example1.com", "https://example2.com"))));
Run Code Online (Sandbox Code Playgroud)
在Http Response标题中,我得到:
X-Frame-Options:"ALLOW-FROM DENY".
为什么我的起源不在标题值中列出?
spring-security http-headers x-frame-options spring-java-config
在调试为什么我的@scheduled方法没有触发时,我将问题追溯到ScheduledAnnotationBeanPostProcessor.
当调用afterSingletonsInstantiated()后,applicationContent已经设置,因此不会调用finishRegistration().
然后onApplicationEvent()似乎永远不会被调用.contextRefresh事件正在作为我使用的调用的StartUpHouseKeeping类发布
@EventListener
public void onApplicationEvent(ContextRefreshedEvent event) { ... }
Run Code Online (Sandbox Code Playgroud)
如果我在afterSingletonsInstantiated()中坚持一个断点并手动调用finishRegistration()就可以正常工作.
我正在使用java配置而没有web.xml
AppInit.java
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
private static final Logger log = LoggerFactory.getLogger(AppInitializer.class);
private static final String[] NO_CACHE_URLS = new String[]{"*.appcache", "*.webapp", "/static/js/*", "/static/css/*", "/api/*", "/ping"};
public AppInitializer() {
log.info("** App Initializer **");
}
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
}
@Override
protected WebApplicationContext createRootApplicationContext() {
// ((ConfigurableEnvironment)context.getEnvironment()).addActiveProfile(_env.getProperty("env", "local"));
return super.createRootApplicationContext();
}
@Override …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个使用弹簧批量的弹簧启动项目.我正在尝试使用JavaConfig而不是xml,但是目前在xml中的所有文档都很难.
我按照https://blog.codecentric.de/en/2013/06/spring-batch-2-2-javaconfig-part-5-modular-configurations进行操作,但是使用它时遇到了困难JobLauncherTestUtils.我知道我需要告诉测试使用正确的弹簧上下文,但我似乎无法弄清楚如何做到这一点.我收到以下错误:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.batch.test.JobLauncherTestUtils' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Run Code Online (Sandbox Code Playgroud)
我的测试如下所示:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {MyApplication.class, MyJobConfiguration.class})
public class RetrieveDividendsTest {
@Autowired
private JobLauncherTestUtils jobLauncherTestUtils;
@Test
public void testSomething() throws Exception {
jobLauncherTestUtils.launchJob();
}
}
Run Code Online (Sandbox Code Playgroud) 是否可以以从外部文件读取配置详细信息并相应配置的方式配置Spring安全性.
(我不是在运行时更改配置.我在谈论在启动时从文件中读取)
我现有 Sporing安全配置的一个示例是:
@EnableWebSecurity
@Configuration
public class SecurityConfig {
@Bean
public UserDetailsService userDetailsService() throws Exception {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withUsername("user").password("userPass").roles("USER").build());
manager.createUser(User.withUsername("admin").password("adminPass").roles("ADMIN").build());
return manager;
}
@Configuration
@Order(1)
public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
public void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.inMemoryAuthentication().withUser("user").password("user").roles("USER");
auth.inMemoryAuthentication().withUser("admin").password("admin").roles("ADMIN");
}
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/v1/**")
.authorizeRequests()
.antMatchers("/api/v1/**").authenticated()
.and()
.httpBasic();
}
}
@Configuration
@Order(2)
public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
public void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.inMemoryAuthentication().withUser("user1").password("user").roles("USER"); …Run Code Online (Sandbox Code Playgroud) spring ×8
java ×5
spring-boot ×3
http-headers ×1
maven ×1
sonarqube ×1
spring-batch ×1
spring-bean ×1
spring-cloud ×1
tomcat ×1