标签: spring-java-config

Spring Security Java Config不生成logout url

我使用的是Spring 4.0.5.RELEASE和Spring Security 3.2.4.

我正在尝试使用java配置创建一个简单的示例应用程序(基于Spring示例).应用程序启动并且身份验证正常运行,也就是说,在访问受保护的url / settings/profile时,我被重定向到登录表单

但是没有/ logout url生成?如果我点击localhost:8080/logout我得到404.

我在之前的项目中使用了类似的代码,所以可能与版本有关?

继承我的安全配置

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
        auth.inMemoryAuthentication().withUser("admin").password("password").roles("ADMIN");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/settings/**").hasRole("ROLE_ADMIN")
                    .and()
                .formLogin()
                    .and()
                .logout()
                    .deleteCookies("remove")
                    .invalidateHttpSession(true)
                    .logoutUrl("/logout")
                    .logoutSuccessUrl("/logout-success")
                .permitAll();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的WebAppInitializer来引导应用程序

 public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { SecurityConfig.class , MvcConfig.class };
    }

    @Override
    protected Class<?>[] …
Run Code Online (Sandbox Code Playgroud)

java configuration spring spring-security spring-java-config

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

现在JavaConfigApplicationContext类在哪里?

什么是maven工件中的JavaConfigApplicationContext类地址?

无法找到它

 <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.2.0.RELEASE</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

spring maven spring-java-config

11
推荐指数
1
解决办法
5423
查看次数

Java Spring Security配置 - 多个身份验证提供程序

Spring安全性中有多个身份验证提供程序的引用,但Java配置中没有示例.

以下链接提供了XML表示法: Spring Security中的多个身份验证提供程序

我们需要使用LDAP或DB进行身份验证

以下是我们的示例代码:

@Configuration
@EnableWebSecurity
public class XSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private AuthenticationProvider authenticationProvider;

    @Autowired
    private AuthenticationProvider authenticationProviderDB;


    @Override
    @Order(1)

    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(authenticationProvider);
    }


    @Order(2)
    protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(authenticationProviderDB);
    }

    @Override
      public void configure(WebSecurity web) throws Exception {
        web
          .ignoring()
             .antMatchers("/scripts/**","/styles/**","/images/**","/error/**");
      }
    ______

    @Override
    @Order(1)
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
        .authorizeRequests()
            .antMatchers("/","/logout","/time").permitAll()
                    .antMatchers("/admin").hasRole("ADMIN")         
                        .anyRequest().authenticated()
            .and()
        .formLogin()
            .loginPage("/index")
            .loginProcessingUrl("/perform_login")
            .usernameParameter("email")
            .passwordParameter("password")
            .failureUrl("/index?failed=true")
            .defaultSuccessUrl("/summary",true)
            .permitAll()
            .and() …
Run Code Online (Sandbox Code Playgroud)

spring-security spring-java-config

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

Spring 4.0 + Security 3.2 + j_spring_security_check的JavaConfiguration

  1. 创建登录页面

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="ISO-8859-1">
            <title>Test</title>
            <script src="static/js/jquery-1.10.2.min.js"></script>
            <script src="static/js/app-controller.js"></script>
        </head>
        <body>
            <div>Login</div>
            <form name="f" action="<c:url value="/j_spring_security_check"/>" method="POST">
                <label for="password">Username</label>&nbsp;<input type="text" id="j_username" name="j_username"><br/>
                <label for="password">Password</label>&nbsp;<input type="password" id="j_password" name="j_password"><br/>
                <input type="submit" value="Validate">&nbsp;<input name="reset" type="reset">
                <input type="hidden" id="${_csrf.parameterName}" name="${_csrf.parameterName}" value="${_csrf.token}"/>
            </form>
            <hr/>
            <c:if test="${param.error != null}">
                <div>
                    Failed to login.
                    <c:if test="${SPRING_SECURITY_LAST_EXCEPTION != null}">
                      Reason: <c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}" />
                    </c:if>
                </div>
            </c:if>
            <hr/>
            <input type="button" value="Echo" id="echo" name="echo" onclick="AppController.echo();">
            <div id="echoContainer"></div>
    
        </body>
    </html>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这里声明一个WebSecurityConfigurer …

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

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

如何使用Spring Security Java配置将HTTP请求重定向到HTTPS?

我有一个Spring Security版本3.2.3应用程序,它可以监听HTTP和HTTPS.我希望将对HTTP端口的任何请求重定向到HTTPS.如何仅使用Java配置?

Spring Security javadocHttpSecurity提出了以下解决方案(修剪为必要的):

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    protected void configure(HttpSecurity http) {
        http.channelSecurity().anyRequest().requiresSecure();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是这没有用,因为HttpSecurity没有方法channelSecurity().

java security spring spring-security spring-java-config

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

如何根据应用程序参数选择要运行的Spring批处理作业 - spring boot java config

我在同一个项目中有两个独立的弹簧批处理作业,因为我想使用相同的基础结构相关的bean.一切都是用Java配置的.我想知道是否有一种正确的方法来启动独立的作业,例如在main方法中的第一个java app参数上.如果我SpringApplication.run只运行第二个作业就会被魔术执行.主要方法如下:

@ComponentScan
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {                
        SpringApplication app = new SpringApplication(Application.class);
        app.setWebEnvironment(false);
        ApplicationContext ctx= app.run(args);              
    }

}
Run Code Online (Sandbox Code Playgroud)

并且这两个作业的配置如Spring.io上的Spring Batch入​​门教程中所示.这是第一个作业的配置文件,第二个作业以相同的方式配置.

@Configuration
@EnableBatchProcessing
@Import({StandaloneInfrastructureConfiguration.class, ServicesConfiguration.class})
public class AddPodcastJobConfiguration {

    @Autowired
    private JobBuilderFactory jobs;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;
    //reader, writer, processor...

}
Run Code Online (Sandbox Code Playgroud)

为了启用模块化,我创建了一个AppConfig类,在这里我为两个作业定义了工厂:

@Configuration
@EnableBatchProcessing(modular=true)
public class AppConfig {

    @Bean
    public ApplicationContextFactory addNewPodcastJobs(){
        return new GenericApplicationContextFactory(AddPodcastJobConfiguration.class);
    }

    @Bean
    public ApplicationContextFactory newEpisodesNotificationJobs(){
        return new GenericApplicationContextFactory(NotifySubscribersJobConfiguration.class);
    }    

}
Run Code Online (Sandbox Code Playgroud)

PS我是Java配置Spring Boot和Spring Batch中的Spring配置新手...

spring spring-batch spring-boot spring-java-config

10
推荐指数
2
解决办法
2万
查看次数

如何在Spring中使用单个@ Bean注释方法(或类似方法)注册多个bean?

我有一个类似于以下的类:

@Configuration
public class ApplicationConfiguration {

    private <T> T createService(Class<T> serviceInterface) {
        // implementation omitted
    }

    @Bean
    public FooService fooService() {
        return createService(FooService.class);
    }

    @Bean
    public BarService barService() {
        return createService(BarService.class);
    }

    ...

}
Run Code Online (Sandbox Code Playgroud)

问题是有太多@ Bean-annotated方法,它们的名称,返回类型和crateService方法调用的参数不同.我想使这个类类似于以下内容:

@Configuration
public class ApplicationConfiguration {

    private static final Class<?>[] SERVICE_INTERFACES = {
            FooSerivce.class, BarService.class, ...};


    private <T> T createService(Class<T> serviceInterface) {
        // implementation omitted
    }

    @Beans // whatever
    public Map<String, Object> serviceBeans() {
        Map<String, Object> result = ...
        for (Class<?> serviceInterface : …
Run Code Online (Sandbox Code Playgroud)

java spring spring-java-config

10
推荐指数
1
解决办法
4606
查看次数

Spring安全自定义令牌过滤器

我正在尝试执行自定义过滤器以获取令牌并对其进行验证.我在这个回复中遵循了这个方法.

这是相关配置:

SecurityConfig:

@Configuration
@EnableWebSecurity
@ComponentScan(basePackages = {"com.company.app"})
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Inject
AuthenticationTokenFilter authenticationTokenFilter;

@Inject
TokenAuthenticationProvider tokenAuthenticationProvider;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .addFilterBefore(authenticationTokenFilter, BasicAuthenticationFilter.class)
                .antMatcher("/*")
                .authenticationProvider(tokenAuthenticationProvider)
                .authorizeRequests()
                    .anyRequest().authenticated();
    }

}
Run Code Online (Sandbox Code Playgroud)

AuthenticationTokenFilter:

@Component
public class AuthenticationTokenFilter implements Filter {

private static final Logger logger = LoggerFactory.getLogger(AuthenticationTokenFilter.class);

@Override
public void init(FilterConfig fc) throws ServletException {
    logger.info("Init AuthenticationTokenFilter");
}

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain fc) throws IOException, ServletException {
    SecurityContext context …
Run Code Online (Sandbox Code Playgroud)

java spring spring-security spring-java-config

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

Spring引导自定义约束验证器未注入服务

这是我的自定义验证器,用于检查某些字段的可用性.UserRepository为null,因此验证器不会注入它.

public class AvailableValidator implements ConstraintValidator<Available,String> {

    @Autowired
    private UserRepository userRepository;

    private Available.Field type;

    public void initialize(Available usernameAvailable) {
        this.type = usernameAvailable.type();
    }

    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
        if (userRepository == null) System.out.println("\n\n------USER REPOSITORY IS NULL-------\n\n");


        switch (type){
            case EMAIL:
                return userRepository.findByEmail(s)==null;
            case NUMBER:
                return userRepository.findByNumber(s)==null;
            case NAME:
                return userRepository.findByName(s)==null;
            default:
                return false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了类似的线程,我必须设置验证工厂.我这样做了:

@SpringBootApplication
public class Application {

    public static void main(String[] args){
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public Validator validator(){
        return new LocalValidatorFactoryBean();
    } …
Run Code Online (Sandbox Code Playgroud)

validation spring dependency-injection spring-boot spring-java-config

9
推荐指数
1
解决办法
3598
查看次数

如何在Spring启动时设置UTF-8字符编码?

我在我的项目中使用spring-boot,并运行这个由spring-boot构建的jar文件作为Centos上的服务.当我运行此服务时:

服务myApp启动

我总是收到以下错误消息:

2016-08-26 09:11:02.002 ERROR 31900 --- [           main] o.s.b.c.FileEncodingApplicationListener  : System property 'file.encoding' is currently 'ANSI_X3.4-1968'. It should be 'UTF-8' (as defined in 'spring.mandatoryFileEncoding').
2016-08-26 09:11:02.018 ERROR 31900 --- [           main] o.s.b.c.FileEncodingApplicationListener  : Environment variable LANG is 'null'. You could use a locale setting that matches encoding='UTF-8'.
2016-08-26 09:11:02.018 ERROR 31900 --- [           main] o.s.b.c.FileEncodingApplicationListener  : Environment variable LC_ALL is 'null'. You could use a locale setting that matches encoding='UTF-8'.
2016-08-26 09:11:02.031 ERROR 31900 --- [           main] o.s.boot.SpringApplication …
Run Code Online (Sandbox Code Playgroud)

java spring-boot spring-java-config centos7

9
推荐指数
3
解决办法
4万
查看次数