gpt4 book ai didi

java - Spring Security 在本地主机上工作,但在服务器上的 docker 中给出 '403 Forbidden'

转载 作者:行者123 更新时间:2023-12-01 17:10:19 25 4
gpt4 key购买 nike

在实现 Spring Security 之前,我可以轻松地在我的服务器上创建一个 docker 镜像,并在它在我的服务器上运行时访问 REST-API。自从我实现了 Spring Security 以来,当我在服务器上运行 docker 镜像(通过 Jenkins 和 NGINX)时,我在每条路径上都会收到“403 Forbidden”响应。

当我在本地运行应用程序时,我可以访问所有路径(通过登录限制的路径除外)。例如。 http://localhost:8080/movies/1 正确返回 id 1 的电影。

我关注了this教程并尝试根据我自己的设置调整大部分内容。

这是我的 Controller 之一 MovieController 的示例:

@RestController
@RequestMapping("/movies")
public class MovieController {
final MovieRepository MR;
public MovieController(MovieRepository MR) {this.MR = MR;}

@RequestMapping("/all")
@ResponseBody
public List<Movie> getAllMovies() {
return MR.findAll();
}

@RequestMapping("/byId")
@ResponseBody
public Optional<Movie> getMovieById(@RequestParam int id) {
return MR.findById(id);
}

@RequestMapping("/byTitle")
@ResponseBody
public Movie getMovieByTitle(@RequestParam String title) {
return MR.findByTitle(title);
}
}

以下代码来 self 的 WebSecurity 类:

@EnableWebSecurity
public class WebSecurity extends WebSecurityConfigurerAdapter {
private final UserDetailsServiceImpl userDetailsService;
private final BCryptPasswordEncoder bCryptPasswordEncoder;

public WebSecurity(UserDetailsServiceImpl userDetailsService, BCryptPasswordEncoder bCryptPasswordEncoder) {
this.userDetailsService = userDetailsService;
this.bCryptPasswordEncoder = bCryptPasswordEncoder;
}

@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.POST, SIGN_UP_URL).permitAll()
.antMatchers("/movies/**").permitAll()
.antMatchers("/chairs/**").permitAll()
.anyRequest().authenticated()
.and().addFilter(new JWTAuthenticationFilter(authenticationManager())).addFilter(new JWTAuthorizationFilter(authenticationManager()))
// this disables session creation on Spring Security
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);
}
}

这是 WebSecurity 类中使​​用的 SIGN_UP_URL 常量:

public static final String SIGN_UP_URL = "/users/register";

如您所见,我至少应该能够访问我网站上的 /movies/ 路径,但即使这些路径(在服务器上)也是被禁止的。

我在我的服务器上使用反向代理,{domain}/api/路由到我服务器上的端口 3001,该端口被重新路由到运行 API 的内部端口 8080。

我认为这就是解决此问题所需的全部信息,如果您需要更多信息,请在本文的回复中请求。

有人可以告诉我为什么当我在 docker 中运行它时会收到“403禁止”响应,以及如何解决这个问题吗?

最佳答案

我认为这很可能是 CORS 问题。

尝试添加:

http.cors().disable()

并检查结果。

如果有效,那么您可以尝试实现启用 CORS 的服务器。

关于java - Spring Security 在本地主机上工作,但在服务器上的 docker 中给出 '403 Forbidden',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61433609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com