添加凭据以访问 REST 控制器

Posted

技术标签:

【中文标题】添加凭据以访问 REST 控制器【英文标题】:Add credentials to access REST controller 【发布时间】:2019-09-25 23:44:01 【问题描述】:

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

我试过的代码:

@Configuration
public class ApplicationSecurityConfig extends WebSecurityConfigurerAdapter 

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception 

    auth.inMemoryAuthentication()
            .withUser("user").password("nooppass").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 它会但会抛出无效密码编码器的异常

【问题讨论】:

太好了,听起来您有一些要求要实现。但是,您还没有发布问题(只是要求)。请澄清您究竟有什么问题,并将任何相关代码发布到问题本身。例如,现在我不确定您是否在区分这些控制器时遇到问题,或者身份验证类型(使用请求标头)以及您到底遇到了什么问题。 【参考方案1】:

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

@配置 公共类 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();



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

【讨论】:

【参考方案2】:

您要查找的短语是Method level Security in Spring。用这个词在谷歌上搜索可能会带你找到你需要的东西。如果不是,您必须更具体地说明您的要求。

【讨论】:

以上是关于添加凭据以访问 REST 控制器的主要内容,如果未能解决你的问题,请参考以下文章

通过 REST API 传递“Windows 身份验证”?

Django REST Framework:如何在 URL 中添加前缀以进行版本控制

Grails Spring Security REST得到403禁止

预检访问控制允许凭据

API Gateway 中控制和管理对 REST API 的访问

重启电脑后需要重新输入共享文件密码怎么样解决