Как настроить webSecurity для имени пользователя и пароля с помощью jwt? - PullRequest
0 голосов
/ 04 мая 2020

Я хочу настроить сервер для аутентификации с использованием имени пользователя и пароля с использованием JWT. Я хочу разрешить публичное разрешение только для конечной точки регистрации , остальные требуют входа в систему. Но, очевидно, конечная точка регистрации все еще входит в JWTAuthenticationFilter и возвращает 200 без каких-либо действий, выполненных вообще. Для остальных конечных точек он возвращает 403, когда я ожидал бы 401. Ниже приведена конфигурация httpSecurity:

private static final String SIGN_UP_URL = "/users/sign-up";

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and().csrf().disable().authorizeRequests()
                .antMatchers(HttpMethod.POST, SIGN_UP_URL).permitAll()
                .anyRequest().authenticated()
                .and()
                .addFilter(new JWTAuthenticationFilter(authenticationManager()))
                .addFilter(new JWTAuthorizationFilter(authenticationManager()))
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }

JWTAuthenticationFilter расширяет UsernamePasswordAuthenticationFilter JWTAuthorizationFilter расширяет BasicAuthenticationFilter

Редактировать: так выглядит мой запрос на публикацию:

@PostMapping("/sign-up")
    public ResponseEntity<AddUserResult> signUp(@RequestBody AddUserCommand command) {
        return new ResponseEntity<>(bus.executeCommand(command), HttpStatus.CREATED);
    }

1 Ответ

1 голос
/ 04 мая 2020

Вы можете попробовать следующее, просто укажите адрес регистрации или URL для входа, который вы хотите загрузить без аутентификации. В этом случае вы сможете получить доступ к URL-адресу без какой-либо аутентификации.

Также в методе Controller было бы хорошо, если вы не упомянете аннотацию @PreAuthorize

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests().antMatchers("/auth/login").permitAll()
                .anyRequest().authenticated();

        http.csrf().disable();

        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

        http.addFilterBefore(new JwtTokenFilter(userDetailsService), UsernamePasswordAuthenticationFilter.class);

    }

    @PostMapping(value = "/signup")
    public User signup(@RequestBody @Valid SignUpRequest signUpRequest) {
        return userService.signup(signUpRequest)
                .orElseThrow(() -> new HttpServerErrorException(HttpStatus.BAD_REQUEST, "User Already Exists"));
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...