标签: spring-java-config

如何使用Spring的Java配置指定过滤器执行顺序?

我在初始化程序中有以下代码:

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文档并未说明执行过滤器的顺序取决于它们在返回数组中的顺序.

如果是,有人可以澄清一下吗?如果没有,有人建议如何,我保证过滤器的执行顺序?

java spring spring-java-config

7
推荐指数
2
解决办法
8689
查看次数

Spring Java Config:没有web.xml的Tomcat部署

我构建了一个没有任何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)

spring tomcat maven maven-tomcat-plugin spring-java-config

7
推荐指数
1
解决办法
1万
查看次数

如何在AbstractAnnotationConfigDispatcherServletInitializer Spring中进行过滤映射

问题是:我可以成功注册过滤器,但不知道如何使用此特定配置设置映射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 spring servlet-filters spring-java-config

7
推荐指数
2
解决办法
8069
查看次数

如何在JavaConfig中定义http"security ='none'?

我想使用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)

spring spring-security spring-boot spring-java-config

7
推荐指数
1
解决办法
5017
查看次数

使用spring java config以编程方式定义bean别名

我们的应用程序中有几个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别名?

java spring spring-bean spring-java-config

7
推荐指数
0
解决办法
675
查看次数

Sonar抱怨Spring Boot配置

我有这个类来启动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

7
推荐指数
1
解决办法
5485
查看次数

如何使用spring java config将X-Frame-Options响应头设置为允许来自值?

如何使用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

7
推荐指数
2
解决办法
9812
查看次数

ScheduledAnnotationBeanPostProcessor没有完成注册()

在调试为什么我的@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)

java spring spring-scheduled spring-java-config

7
推荐指数
0
解决办法
385
查看次数

Spring Batch Java Config JobLauncherTestUtils

我目前正在开发一个使用弹簧批量的弹簧启动项目.我正在尝试使用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-batch spring-boot spring-java-config

7
推荐指数
2
解决办法
9695
查看次数

提供配置弹簧安全的方法?

是否可以以从外部文件读取配置详细信息并相应配置的方式配置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)

java spring spring-security spring-java-config

7
推荐指数
1
解决办法
1303
查看次数