Przekierowywanie w incereptorze podczas wywoływania adresu z REST API

Odpowiedz Nowy wątek
2017-08-04 20:57
0

Chciałem zabezpieczyć kilka adresów w REST API, aby były dostępne tylko dla zalogowanych użytkowników. Utworzyłem do tego specjalny incereptor

public class CheckLoginStatus extends HandlerInterceptorAdapter {

    @Override
    public void postHandle(javax.servlet.http.HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        if(SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString().equals("anonymousUser")) {
            response.sendRedirect(signIn);
        }
    }
}

i zarejestrowałem go w konfiguracji

@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new CheckLoginStatus()).addPathPatterns("/messages/*");
    }

Incereptor wywoływany jest dla np. metody

@PostMapping(value = "/sendMessage")
    @ApiMethod(description = "Save message")
    public HttpEntity<Boolean> sendMessage(
            @RequestBody @Valid SendMessageDTO sendMessageDTO
    ) {
        messageService.saveMessage(converterSendMessageDTOToMessage.convert(sendMessageDTO));

        return ResponseEntity.ok(true);
    }

Jednak podczas wywoływania adresu w konsoli wyrzuca wyjątek

java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed

Nie jestem pewien czy działają przekierowania w incereptorze użyte dla adresu z REST API.


Pozostało 580 znaków

2017-08-04 21:14
0

oO czemu nie zrob8c autoryzacji na kontrolerach po ludzku?


Nie pomagam przez PM. Pytania zadaje się na forum.
Chodzi Tobie o adnotację @Security ? - Jonki1997 2017-08-04 21:20
zapewne chodzi mu o Spring Security - Pinek 2017-08-04 21:22
Używam Spring Security, ale nie mogę użyć adnotacji @Secured, bo po wyłączeniu i włączeniu przeglądarki, nie ma już obiektu Principal. - Jonki1997 2017-08-04 21:24
Ale to trochę inny problem, piszesz o funkcji "remember me". Serwer rozpoznaje użytkownika po kluczu sesji trzymanym w ciasteczkach przeglądarki, jak ją zrestartujesz to ginie - student pro 2017-08-05 12:29

Pozostało 580 znaków

2017-08-04 23:38
0

A czemu używasz postHandle a nie preHandle?


Przeważnie ignoruję niezarejestrowanych użytkowników.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0