如何在Spring Boot应用程序中将单个端点列入白名单?

时间:2019-12-27 13:28:27

标签: rest spring-boot spring-security

我是Spring Boot的新手,正在尝试找出将白名单 终点。我已经启用了Spring Security。

我有一个带有端点Hello的控制器类,该类应返回“ hello” 作为响应,希望任何人都可以在不需要身份验证的情况下访问此端点。

@RestController
@RequestMapping(value = {"/employee"})

public class EmployeeController {

    @Autowired
    EmployeeRepository empRepose;

    @Autowired
    EmployeeService empService;

    @Autowired
    private Utility utility;

    @PreAuthorize("permitAll()")
    @GetMapping(value = "/hello", produces = MediaType.APPLICATION_JSON_VALUE)
    public String home() {
        return "Hello Employee!";
    }
}

Spring Security配置:

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableWebSecurity
public class ApplicationBasicAuth extends WebSecurityConfigurerAdapter {

    @Autowired
    RegisterUser beanRegisteruser;

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
       /* httpSecurity.csrf().disable()
                .authorizeRequests().anyRequest().authenticated()
                .and().httpBasic();*/

              /*httpSecurity
                        .httpBasic()
                        .and()
                        .authorizeRequests()
                        .antMatchers(HttpMethod.GET, "/employee/**").permitAll()
                        .and()
                        .csrf().disable();*/

        httpSecurity.csrf().disable();

        httpSecurity.authorizeRequests().anyRequest().permitAll();

    }

我尝试了很多方法将所有不需要进行身份验证的端点甚至1个端点列入白名单。

请帮助我在这里找出我做错了什么。

1 个答案:

答案 0 :(得分:0)

您可以使用configure(WebSecurity web)和/或configure(HttpSecurity http)来实现,如果同时使用它们,请注意,您必须将configure(WebSecurity web)保持在configure(HttpSecurity http)以上。您可能会看到更多详细信息here


configure(WebSecurity web)

WebSecurity ignoring()方法的一般用法省略 Spring Security,Spring Security的任何功能均不可用。

@Override
public void configure(WebSecurity web) throws Exception {
    web
        .ignoring()
        .antMatchers("/hello")
}

configure(HttpSecurity http)

您还可以将configure(HttpSecurity http).permitAll()一起使用,如下所示

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
        .authorizeRequests()
        .antMatchers("/hello").permitAll()
        .anyRequest().authenticated();
}