有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring安全性在localhost上工作,但在服务器上的docker中给出了“403禁止”

在实现Spring安全性之前,我可以在服务器上轻松创建docker映像,并在服务器上运行REST-API时访问它。由于我实现了Spring安全性,当我在服务器上运行docker映像时(通过Jenkins和NGINX),我在每条路径上都会得到“403禁止”响应

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

我遵循this教程,并试图根据自己的设置调整大部分内容

这是我的一个控制器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);
    }
}

以下代码来自我的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类中使用的注册URL常量:

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

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

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

我想这就是这个问题所需要的全部信息,如果你需要更多信息,请在回复这篇文章时要求

有谁能告诉我为什么在docker中运行时会得到“403禁止”响应,以及如何解决这个问题


共 (1) 个答案

  1. # 1 楼答案

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

    尝试添加:

    http.cors().disable()
    

    并检查结果

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