До реализации Spring Security я мог легко создать docker образ на своем сервере и получить доступ к REST-API, когда он работал на моем сервере. Поскольку я реализовал Spring Security, я получаю ответ «403 Forbidden» на каждом пути, когда запускаю образ docker на своем сервере (через Jenkins и NGINX).
Когда я запускаю приложение локально, я могу получить доступ ко всем путям (за исключением входа в систему с ограниченным доступом). Например, http://localhost:8080/movies/1
возвращает mov ie с id
1 должным образом.
Я следовал этому руководству и пытался приспособить большинство вещей к моей собственной настройке.
Это пример одного из моих контроллеров, 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);
}
}
Это константа SIGN_UP_URL, используемая в классе WebSecurity :
public static final String SIGN_UP_URL = "/users/register";
Как видите, я должен хотя бы иметь возможность посещать пути /movies/
на своем веб-сайте, но даже они запрещены (на сервере).
I Я использую обратный прокси на моем сервере, {домен} / api / маршрутизирует на порт 3001 на моем сервере, который перенаправлен на внутренний порт 8080, где работает API.
Я думаю, что это вся информация для этой проблемы, если вам нужна дополнительная информация, пожалуйста, запросите ее в ответах на этот пост.
Может кто-нибудь сказать, почему я получу ответ «403 запрещено», когда я запусту его в * 1032? * а как мне это исправить?