添加凭据以访问REST控制器

时间:2019-05-08 09:18:48

标签: java rest spring-boot

我有一个带有多个控制器的Web服务。我只需要为其中之一添加身份验证。其余应保留未经身份验证。请注意,我只需要在请求标头中添加用户名和密码。没有登录表单。我正在使用Spring Boot应用程序。

我尝试的代码:

@Configuration
public class ApplicationSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {

    auth.inMemoryAuthentication()
            .withUser("user").password("{noop}pass").roles("ADMIN");

}

// Secure the endpoints with HTTP Basic authentication
@Override
protected void configure(HttpSecurity http) throws Exception {

    http
            //HTTP Basic authentication
            .httpBasic()
            .and()
            .authorizeRequests()
            .antMatchers(HttpMethod.GET, "/myController").hasRole("ADMIN")
            .and()
            .csrf().disable()
            .formLogin().disable();
}

但是,它不要求用户名和密码。如果我删除了{noop},但确实抛出了无效的密码编码器异常

2 个答案:

答案 0 :(得分:0)

您要查找的短语是Method level Security in Spring。用这个词在Google上搜索可能会带您找到所需的内容。如果不是这样,您将必须更加具体地满足您的要求。

答案 1 :(得分:0)

我最终使用以下代码解决了我的问题:

@配置 公共类ApplicationSecurityConfig扩展了WebSecurityConfigurerAdapter {

public static String ROLE_NAME = "ROLENAME";

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {

    auth.inMemoryAuthentication().passwordEncoder(new Pbkdf2PasswordEncoder("key", 10000, 128))
            .withUser("userName").password("encryptedPassword").roles(ROLE_NAME);

}

@Override
protected void configure(HttpSecurity http) throws Exception {

    http
            .httpBasic()
            .and()
            .authorizeRequests()
            .antMatchers(HttpMethod.GET, "/securedPath").hasRole(ROLE_NAME)
            .and()
            .csrf().disable()
            .formLogin().disable();
}

}

您可以配置加密密码,并将所需的任何更改应用于此代码。主要目标是仅使用路径securePath来保护其余一个API,给定的用户名和密码可以使用或不使用加密。在我的示例中,我使用了加密密码,并将其添加到配置文件中。此类将自动解密并使用密码。无需用户界面,因为浏览器会自动弹出登录表单。