java - Spring Security permitAll 不允许匿名访问

标签 java spring spring-mvc spring-security

我有一个方法,我想同时允许匿名和经过身份验证的访问。

我正在使用 Spring Security 3.2.4 和基于 Java 的配置。

覆盖的配置方法(在我的扩展 WebSecurityConfigurerAdapter 的自定义配置类中)具有以下 http block :

    http
        .addFilterBefore(muiltpartFilter, ChannelProcessingFilter.class)
        .addFilterBefore(cf, ChannelProcessingFilter.class)
        .authorizeRequests()
            .anyRequest()
            .authenticated()
            .and()
        .authorizeRequests()
            .antMatchers("/ping**")
            .permitAll()
            .and()
        .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
        .logout()
            .logoutUrl("/logout")
        .logoutSuccessUrl("/login");

ping 请求处理程序和方法位于还包含登录处理程序的 Controller 中,并且它没有单独的 @PreAuthorize 或其他可能导致问题的注释。

问题是匿名访问被拒绝,用户被重定向到登录页面。

在调试级别登录,我看到来自 Spring Security 的以下反馈:

[2014-07-11 13:18:04,483] [DEBUG] [org.springframework.security.web.access.intercept.FilterSecurityInterceptor] Secure object: FilterInvocation: URL: /ping; Attributes: [authenticated]
[2014-07-11 13:18:04,483] [DEBUG] [org.springframework.security.web.access.intercept.FilterSecurityInterceptor] Previously Authenticated: org.springframework.security.authentication.AnonymousAuthenticationToken@6faad796: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@ffffa64e: RemoteIpAddress: 192.168.2.128; SessionId: 0EF6B13BBA5F00C020FF9C35A6E3FBA9; Granted Authorities: ROLE_ANONYMOUS
[2014-07-11 13:18:04,483] [DEBUG] [org.springframework.security.access.vote.AffirmativeBased] Voter: org.springframework.security.web.access.expression.WebExpressionVoter@123f2882, returned: -1
[2014-07-11 13:18:04,483] [DEBUG] [org.springframework.security.web.access.ExceptionTranslationFilter] Access is denied (user is anonymous); redirecting to authentication entry point

我想要完成的是有一个可以在任何时候调用的方法,它会发送一个回复,指示请求是否在登录的 session 中。

最佳答案

权限顺序很重要,当我这样配置时它起作用:

.authorizeRequests()
        .antMatchers("/ping**")
        .permitAll()
        .and()
.authorizeRequests()
        .anyRequest()
        .authenticated()
        .and()

关于java - Spring Security permitAll 不允许匿名访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24696717/

相关文章:

java - 查找最相似的 List<String> 的有效方法

java - 如何从这样的 JSON 返回 List<Object> ?

java - Spring中如何传递多个请求参数?

java - 未能延迟实例化 HashMap

java - 找不到类 org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor 的序列化程序

JavaFX 属性监听器排序

java - 使用 com.sun.net.httpserver.HttpsServer - 如何指定协议(protocol)?

json - 执行自定义过滤器 UsernamePasswordAuthenticationFilter 后如何以编程方式返回 json 响应?

spring-mvc - 如何从使用 JAXB 生成的 XML 中删除默认的根元素命名空间前缀

spring - @PostConstruct spring 在没有 bean 声明的情况下不会被调用