2015-05-04 27 views
6

Chcę uzyskać obiekt odpowiedzi w Spring AOP przed poradą. Jeśli sesja jest nieważna, chcę przekierować na stronę logowania, ale nie mogę uzyskać obiektu HttpServletResponse w metodzie Przed poradą.Jak uzyskać obiekt HttpServletRequest i HttpServletResponse w Spring AOP

Próbowano w następujący sposób.

@Autowired 
    private HttpServletResponse response; 

    public void setResponse(HttpServletResponse response) { 
     this.response = response; 
    } 

StackTrace:

caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: javax.servlet.http.HttpServletResponse com.****.****.aspect.LogProvider.response; nested exception is 

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [javax.servlet.http.HttpServletResponse] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:506) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) 
    ... 33 more 

Każda pomoc będzie mile widziane.

+0

Zamiast autowiring, próbowaliście tego? 'HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()). GetRequest(); ' –

+0

Dzięki za odpowiedź. Spróbuję z tym –

+0

Potrzebowałem obiektu HttpServletResponse. –

Odpowiedz

1

Zasadniczo wykonujemy przekierowanie ze strony jsp, tj. Z warstwy interfejsu użytkownika obsługujemy tego rodzaju operację (przekierowanie). Mam więc nadzieję, że będziesz korzystać ze spokojnych usług w swojej aplikacji. A w przypadku większości restful usług idziemy na żądanie asynchroniczne. Jeśli jest to połączenie usług asynchronicznych i spokojnych; i jestem pewien, że użyjesz tego w swojej aplikacji. Jeśli twoja sesja jest nieważna i spróbujesz uzyskać dostęp do jakiejkolwiek operacji w "sesji", to wyląduje ona w "IllegalStateException". W przypadku tego typu scenariusza postępuj zgodnie z poniższym scentralizowanym mechanizmem obsługi wyjątków dostarczonym przez JAX-RS: javax.ws.rs.ext.ExceptionMapper. zamieszczonych poniżej etapach: krok 1: Tworzenie zdefiniowany przez użytkownika niekontrolowanego wyjątek jak MyApplicationException:

public class MyApplicationException extends RuntimeException { 
    public MyApplicationException() {super();} 

    // implement other methods of RuntimeException as per your requirement 
} 

krok 2: Tworzenie typ zdefiniowany przez użytkownika z ExceptionMapper

public class MyApplicationExceptionHandler implements ExceptionMapper<MyApplicationException> 
{ 
    @Override 
    public Response toResponse(MyApplicationException exception) 
    { 
     return Response.status(Status.FORBIDDEN).entity(exception.getMessage()).build(); 
// set any Status code of 4XX as this is client side error not server side 
    } 
} 

step-3:In all your ajax request in the UI code check this Status Code and redirect to the login page.

To wszystko skończyłeś z lepszą implementacją. Gwarantowana ...

-2

Aby uzyskać obiekt odpowiedzi możesz użyć tego kodu:

ServletWebRequest servletWebRequest=new ServletWebRequest(request); 
HttpServletResponse response=servletWebRequest.getResponse(); 

Aby uzyskać obiektu request:

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getR‌equest(); 

Jeśli otrzymasz odpowiedź null potem widzę odpowiedź nie jest jeszcze uformowane po zwrocie kontroli. W takim razie jedynym wyjściem jest przejście z interceptors.

+2

uzyskanie odpowiedzi zwraca wartość null! –

1

można uzyskać reakcję ramach metody:

RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); 
HttpServletResponse response = ((ServletRequestAttributes)requestAttributes).getResponse();