当前位置: 首页 > 知识库问答 >
问题:

限制restapi方法,但在springboot项目中GET除外

乐宜民
2023-03-14

我用SpringBoot做了一个RESTAPI项目。控制器中有各种标准方法,如get、post、put和delete。

我的目标是使我能够通过angular应用程序仅访问api调用(get调用除外)。其他方法(post、put和delete)无法从外部访问。

我试图用WebSecurityConfigureAdapter和configure函数来解决这个问题,但我没有得到它。当我第一次在pom上导入安全依赖项(spring boot starter security)时。xml,然后所有方法都被阻止。我尝试在configure方法中允许get调用,但随后无法使用basic auth over postman进行post调用。每次我都犯了403个禁止的错误。

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring()
            .antMatchers(HttpMethod.GET)
            .antMatchers("/h2-console/**")
            .antMatchers("/login/**");
    }
    
}

顺便说一下,我想在application.properties文件中为Spring安全创建自己的用户名和密码。但是我认为如果我使用一个SecurityConfig配置文件,这是行不通的。

spring.security.user.name=myUsername
spring.security.user.password=myPassword

不管我怎么做,我怎么能从最短最简单的方法得到这个呢?那么我如何从我的angular应用程序中调用阻塞的方法(post、put、delete)?

谢谢。

共有1个答案

公孙宏远
2023-03-14

如果我没有弄错的话,您希望您的项目对GET方法没有访问限制,并且每个人都应该可以访问此方法类型。

所有剩余的请求(发布、放置、删除等)都可以通过身份验证进行访问。

您可以通过以下方式实现这一点。假设您有一个如下所示的控制器:

@RestController
@RequestMapping("security")
public class SecurityController {

    @GetMapping("get")
    public ResponseEntity<String> get() {
        return ResponseEntity.ok("Get Method");
    }

    @PostMapping("post")
    public ResponseEntity<String> post() {
        return ResponseEntity.ok("Post Method");
    }

    @PutMapping("put")
    public ResponseEntity<String> put() {
        return ResponseEntity.ok("Put Method");
    }

    @DeleteMapping("delete")
    public ResponseEntity<String> delete() {
        return ResponseEntity.ok("delete");
    }

}

在这种情况下,您的WebSecurityConfigrer应该如下所示:

@EnableWebSecurity
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().authorizeRequests()
                .antMatchers(HttpMethod.GET).permitAll()
                .anyRequest().authenticated().and().httpBasic();
    }
}

这里要做的第一件事是确定GET,这是一种超文本传输协议方法,可以在没有任何授权的情况下访问。然后,它授权其余的Httpmethod的访问。最后,我们指定使用Basic Authhttp pBasic()。此信息由用户名密码信息组成,这些信息在您的application.properties文件中定义。

通过检查此处的问题,您可以看到HttpSecurityWebSecurity之间的区别。

我希望这个答案对你有帮助。

 类似资料:
  • 本文向大家介绍SpringBoot项目中使用AOP的方法,包括了SpringBoot项目中使用AOP的方法的使用技巧和注意事项,需要的朋友参考一下 本文介绍了SpringBoot项目中使用AOP的方法,分享给大家,具体如下: 1.概述 将通用的逻辑用AOP技术实现可以极大的简化程序的编写,例如验签、鉴权等。Spring的声明式事务也是通过AOP技术实现的。 具体的代码参照 示例项目 https:/

  • 我正在进行一个SpringBoot项目,该项目使用常规MVC机制来公开REST API。 在一个特定的GET API中,我得到了406HTTP响应。 下面是我的控制器方法的样子: AnalysisDetailResponse是使用Lombok创建的(在其他API的情况下,Lombok可以完美地工作) 我已经验证了整个响应对象的内容,它似乎是完美的。然而,响应总是406。 我需要JSON格式的响应,

  • 本文向大家介绍SpringBoot项目@Async方法问题解决方案,包括了SpringBoot项目@Async方法问题解决方案的使用技巧和注意事项,需要的朋友参考一下 现象: 1. 表面现象: 方法中输出的日志, 日志文件中找不到, 也没有任何报错(即@Async标注的方法没有执行, 也没有报错) 2. 分析现象: 日志中某个时刻之后没有了task-xxx线程的日志 原因: @Async异常方法默

  • 在get方法中尝试在springboot中按id查找行时,收到一个空值。我在这里对数据库的调用是否有误? 存储库- 服务- 控制器-

  • 本文向大家介绍Maven搭建springboot项目的方法步骤,包括了Maven搭建springboot项目的方法步骤的使用技巧和注意事项,需要的朋友参考一下 Maven搭建springboot项目 本文是基于Windows 10系统环境,使用Maven搭建springboot项目 Windows 10 apache-maven-3.6.0 IntelliJ IDEA 2018.3.4 x64 一

  • 本文向大家介绍IDEA项目使用SpringBoot+MyBatis-Plus的方法,包括了IDEA项目使用SpringBoot+MyBatis-Plus的方法的使用技巧和注意事项,需要的朋友参考一下 步骤如下: 1.打开IDEA 2.File—>new—> project 3.选择spring initializr—>Next 4.填写Grouphe和Artifact,选择Java version