我用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)?
谢谢。
如果我没有弄错的话,您希望您的项目对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 Auth
和http pBasic()
。此信息由用户名
和密码
信息组成,这些信息在您的application.properties
文件中定义。
通过检查此处的问题,您可以看到HttpSecurity
和WebSecurity
之间的区别。
我希望这个答案对你有帮助。
本文向大家介绍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