添加凭据以访问 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 控制器的主要内容,如果未能解决你的问题,请参考以下文章
Django REST Framework:如何在 URL 中添加前缀以进行版本控制
Grails Spring Security REST得到403禁止