服务器以 403 (Forbidden) 状态响应
Posted
技术标签:
【中文标题】服务器以 403 (Forbidden) 状态响应【英文标题】:the server responded with a status of 403 (Forbidden) angular 【发布时间】:2020-05-29 22:36:08 【问题描述】:当我尝试使用this.http.get
和@GetMapping
拨打电话时,我可以将电话发送到弹簧控制器,
当我尝试从this.http.get
更改为this.http.post
以及从@GetMapping
更改为@PostMapping
时,我无法调用弹簧控制器/api/v1/basicauth
方法。
因为我有用户名和密码,所以我只想使用PostMapping
我的代码如下:-
角度
var formData: any = new FormData();
formData.append("userName", username);
formData.append("password", password);
let params = new HttpParams();
params = params.append('username', username);
params = params.append('password', password);
return this.http.post<any>('/api/v1/basicauth', formData ).pipe(map((res) =>
this.username = username;
this.password = password;
));
春季启动:-
@PostMapping(path = "/basicauth")
public AuthenticationBean helloWorldBean(@RequestBody UserDetails user)
log.info("Start helloWorldBean method");
UserDetails.java
public class UserDetails
private int userId;
private String userName;
private String password;
【问题讨论】:
试试“username, password”而不是“formData”作为“body”参数怎么样? @happyZZR1400 我可以通过 this.http.get 使用 body 参数来调用 spring 控制器 如果你尝试对“this.http.post”做同样的事情会发生什么? 你休息是为 GET 实现的,而不是你为什么从 angular 发送帖子? @happyZZR1400 我无法使用this.http.post
拨打电话
【参考方案1】:
不要使用FormData (Angular)
,因为您的控制器正在接受@RequestBody
你的formData
应该是这样的
var formData = "username": username, "password": password;
Rest 会自动将其反序列化为 UserDetails
类
【讨论】:
【参考方案2】:客户端
login(username: string, password: string)
return this.http.post<any>('/api/v1/basicauth', username, password )
.pipe(map(user =>
// eg.
// localStorage.setItem('currentUser', JSON.stringify(user));
return user;
));
示例来自:https://jasonwatmore.com/post/2019/06/22/angular-8-jwt-authentication-example-tutorial
服务器端
您正在使用@RequestParam 检索参数,这意味着您正在将参数作为http://host:8080/api/auth?password=abc&...
进行检索。
请查看https://www.baeldung.com/spring-request-response-body
【讨论】:
我想将用户名和密码作为json对象传递,我可以单独接收uname和pwd,我什至想在java中作为对象接收 你如何在服务器端接收这两个? ...而且我认为您错过了使用管道以及在客户端和服务器上发布 & get(?@GetMapping) 方法。 @RequestParam(name = "username") String username,@RequestParam(name = "password") String password @Codelover 更新了答案,我认为这不是正确的方法。了解更多信息:https://www.baeldung.com/spring-request-param。 我会检查那个链接,但我现在说我正在使用作为参数,因为我无法作为对象发送。我已经更新了正确的代码以上是关于服务器以 403 (Forbidden) 状态响应的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法让 AuthorizeAttribute 响应状态码 403 Forbidden 而不是重定向?