标签: spring-java-config

使用Spring Boot配置Spring Security

我是使用Java Config配置Spring Security的新手.我试图关注这个帖子.但是,当我运行我的应用程序时,我会对所有URL 进行基本Auth挑战,包括.输入下面的任一userid/pass组合似乎不起作用./

我的控制器:

package com.xxx.web;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/")
/**
 * Controller to handle basic "root" URLs
 * 
 * @author xxx
 * @version 0.1.0
 */
public class RootController {

    /**
     * Handles '/'
     * @param model
     * @return
     */
    @RequestMapping
    public String index(Model model) {
        return "index";
    }

    /**
     * Handles '/signup'
     * @param model
     * @return
     */
    @RequestMapping("/signup")
    public String signup(Model model) {
        return …
Run Code Online (Sandbox Code Playgroud)

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

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

Spring Security:Java Config不起作用

我正在尝试建立一个包含spring security的java可配置spring环境.应用程序启动没有任何错误,但我无法成功登录.

WebAppInitializer

import javax.servlet.ServletContext;
import javax.servlet.ServletException;

import org.springframework.core.annotation.Order;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

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

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { WebAppConfig.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}
Run Code Online (Sandbox Code Playgroud)

SecurityInitializer

import org.springframework.core.annotation.Order;
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;

@Order(value = 2)
public class SecurityInitializer extends …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc spring-security spring-java-config

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

Spring无法找到JpaRepository

使用JavaConfig我在查找@RepositorySpring bean时遇到问题.

存储库接口定义如下:

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    User findByUsername(String username);

}
Run Code Online (Sandbox Code Playgroud)

配置定义如下:

@Configuration
@ComponentScan("com.example")
@EnableAutoConfiguration
@EnableJpaRepositories("com.example")
public class SampleApplication extends SpringBootServletInitializer {
...
Run Code Online (Sandbox Code Playgroud)

包结构如下所示:

com.example
     configuration
           SampleApplication
     repository
           UserRepository
Run Code Online (Sandbox Code Playgroud)

在日志文件中,我看到存储库被认为是bean定义的候选者,但是:

ClassPathBeanDefinitionScanner | Ignored because not a concrete top-level class:
Run Code Online (Sandbox Code Playgroud)

趣味事实

如果我将SampleApplication类移动到com.example包,一切都开始工作.

我缺少什么想法?

java spring spring-data spring-boot spring-java-config

8
推荐指数
1
解决办法
9626
查看次数

Spring Security Java Config - 自定义AuthenticationProvider和UserDetailsS​​ervice

我使用java配置来配置Spring Security,并且我已经定制了AuthenticationProvider和自定义UserDetailsS​​ervice,以便在http://forum.spring.io/forum/spring-projects/security/95715-extra-login-fields之后添加额外的登录字段

我很难通过使用java配置将两个自定义类添加到Spring Security框架中.作为AuthenticationProvider#authenticationProvider的java doc描述:

根据传入的自定义AuthenticationProvider添加身份验证.由于AuthenticationProvider实现未知,因此必须在外部完成所有自定义,并立即返回AuthenticationManagerBuilder.

此方法不确保UserDetailsS​​ervice可用于getDefaultUserDetailsS​​ervice()方法.

所以我的问题是在这种情况下设置UserDetailsS​​ervice的方法是什么?

spring-security spring-java-config

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

Java Spring如何在webapplicationinitializer中强制使用https ssl?

要在web.xml中强制https,我使用的是此代码段:

<security-constraint>
  <web-resource-collection>
      <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
  </user-data-constraint>
</security-constraint>
Run Code Online (Sandbox Code Playgroud)

在Spring Java Config中是否有相同的功能?我已经发现我需要一个ServletSecurityElement.但是我如何连接到其他人呢?

public class WebAppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext container) throws ServletException {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        container.addListener(new ContextLoaderListener(context));
        context.register(PersistenceJPAConfig.class);

        FilterRegistration filter = container.addFilter("wicket.myproject", WicketFilter.class);
        filter.setInitParameter("applicationClassName", WicketApplication.class.getName());
        filter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, "/*");
        filter.addMappingForUrlPatterns(null, false, "/*");

        HttpConstraintElement forceHttpsConstraint = new HttpConstraintElement(ServletSecurity.TransportGuarantee.CONFIDENTIAL, "");
        ServletSecurityElement securityElement = new ServletSecurityElement(forceHttpsConstraint);
    }
}
Run Code Online (Sandbox Code Playgroud)

java https spring spring-java-config

8
推荐指数
1
解决办法
2917
查看次数

Spring占位符不解析JavaConfig中的属性

目前我有一个Spring xml配置(Spring 4),它加载了一个属性文件.

context.properties

my.app.service = myService
my.app.other = ${my.app.service}/sample
Run Code Online (Sandbox Code Playgroud)

Spring xml配置

<bean id="contextProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="ignoreResourceNotFound" value="true" />
    <property name="fileEncoding" value="UTF-8" />
    <property name="locations">
        <list>
            <value>classpath:context.properties</value>
        </list>
    </property>
</bean>
<bean id="placeholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="ignoreResourceNotFound" value="true" />
    <property name="properties" ref="contextProperties" />
    <property name="nullValue" value="@null" />
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
</bean>
Run Code Online (Sandbox Code Playgroud)

使用属性的Bean

@Component
public class MyComponent {

    @Value("${my.app.other}")
    private String others;

}
Run Code Online (Sandbox Code Playgroud)

这是完美的,others价值是MyService/sample,例外.但是当我尝试用JavaConfig替换这个配置时@Value,我的组件中的工作方式不同.值不myService/sample但是${my.app.service}/sample.

@Configuration
@PropertySource(name="contextProperties", ignoreResourceNotFound=true, value={"classpath:context.properties"})
public class PropertiesConfiguration { …
Run Code Online (Sandbox Code Playgroud)

java spring properties-file spring-java-config

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

从@ComponentScan中排除测试类中的配置

我一直在遇到测试类的@ComponentScan问题@Configuration- 也就是说,在集成测试期间会@ComponentScan出现意外@Configuration情况.

例如,假设您有一些全局配置,src/main/java其中包含组件com.example.service,com.example.config.GlobalConfiguration:

package com.example.config;
...
@Configuration
@ComponentScan(basePackageClasses = ServiceA.class)
public class GlobalConfiguration {
    ...
}
Run Code Online (Sandbox Code Playgroud)

它旨在提供两个服务,com.example.services.ServiceAcom.example.services.ServiceB注释@Component@Profile("!test")(为简洁起见省略).

然后在src/test/java中,com.example.services.ServiceATest:

package com.example.services;
...
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ServiceATest.ServiceATestConfiguration.class)
public class ServiceATest {
    ...
    @Configuration
    public static class ServiceATestConfiguration {
         @Bean
         public ServiceA serviceA() {
             return ServiceA(somemocking...);
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

而且com.example.ServiceBIntegrationTest,GlobalConfiguration.class为了进行集成测试需要引入,但仍然避免使用@ActiveProfiles("test")以下方法引入危险的实现:

package com.example.services;
... …
Run Code Online (Sandbox Code Playgroud)

java junit spring unit-testing spring-java-config

8
推荐指数
1
解决办法
8866
查看次数

如何使用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以编程方式定义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
查看次数

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

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