在Spring Boot项目上限制除GET之外的其余API方法



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

我的目标是让我只能通过我的angular应用程序访问api调用(get调用除外(。其他方法(张贴、放置和删除(无法从外部访问。

我试图用WebSecurityConfigurerAdapter和configure函数来解决这个问题,但我无法得到它。当我第一次在pom.xml上导入安全依赖项(spring-boot-starter-security(时,所有方法都被阻止了。我试图在configure方法中允许get调用,但后来我无法通过poster使用基本的auth进行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(呢?

谢谢。

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

所有剩余的请求(post、put、delete等(都可以通过身份验证进行访问。

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

@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");
}

}

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

@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(一种http方法(可以在没有任何授权的情况下访问。然后,它授权其余HttpMethod的访问。最后,我们指定使用Basic AuthhttpBasic()。此信息由application.properties文件中定义的usernamepassword信息组成。

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

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

相关内容

  • 没有找到相关文章