【问题标题】:How to allow anonymous access on @RequestMapping?如何允许匿名访问@RequestMapping?
【发布时间】:2017-06-29 07:16:27
【问题描述】:

如何定义@RequestMapping 方法以显式允许匿名(未经授权)访问?

以下不起作用,总是得到401 Unauthorized

@RequestMapping("/test")
@Secured(value={"ROLE_ANONYMOUS"})
public String test() {
    return "OK";
}

一般来说,整个应用程序的安全性如下,使用spring-boot

security.basic.enabled=true.

@Configuration
public class AuthConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
    }
}

【问题讨论】:

  • 它应该可以使用@Secured("ROLE_ANONYMOUS"),也许您已经覆盖了WebSecurityConfigurerAdapter.configure(HttpSecurity httpSecurity),所以这个@Secured("ROLE_ANONYMOUS") 不被考虑?

标签: java spring spring-security


【解决方案1】:

您可以覆盖configure(HttpSecurity httpSecurity) 方法并在那里定义您的规则:

@Configuration
public class AuthConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
    }

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception
    {
        httpSecurity.authorizeRequests()
           .antMatchers("/test")
           .permitAll();
        super.configure(http);
    }
}

【讨论】:

    【解决方案2】:
    @Configuration
    public class AuthConfig extends WebSecurityConfigurerAdapter {
        @Autowired
        private UserDetailsService userDetailsService;
    
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
        }
    
        @Override
        protected void configure(HttpSecurity httpSecurity) throws Exception
        {
            httpSecurity.authorizeRequests().regexMatcher("^((?!test).)*$").permitAll();
        }
    }
    

    我不确定test 之前是否有斜线,但请尝试这种否定的环视方法。

    【讨论】:

      猜你喜欢
      • 2019-11-23
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 2014-09-02
      • 2016-08-31
      • 1970-01-01
      • 2012-01-05
      相关资源
      最近更新 更多