2015-05-04 4 views
6

Я хочу получить объект ответа весной AOP перед советом. Если сеанс недействителен, я хочу перенаправить на страницу входа, но не смог получить объект HttpServletResponse в методе Before advice.Как я могу получить объект HttpServletRequest и HttpServletResponse в Spring AOP

Пробовал следующим образом.

@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 

Любая помощь будет оценена.

+0

Вместо автоматического связывания, вы пробовали это? 'HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()). GetRequest(); ' –

+0

Спасибо за ваш ответ. Я попробую с этим –

+0

Мне нужен объект HttpServletResponse. –

ответ

1

В основном мы переадресовываем со страницы jsp, то есть из слоя пользовательского интерфейса мы обрабатываем такой вид операции (перенаправление). Поэтому я надеюсь, что вы будете использовать некоторые успокаивающие услуги в своем приложении. И для большинства остальных услуг мы обращаемся за асинхронным запросом. Если это комбинация асинхронных и спокойных сервисов; и я уверен, что вы будете использовать это в своем приложении. Если ваш сеанс недействителен и вы пытаетесь получить доступ к любой операции над «сеансом», тогда он высадит вас в «IllegalStateException». Для такого типа сценария, пожалуйста, следуйте нижеуказанному централизованному механизму «Обработка исключений», предоставленному JAX-RS: javax.ws.rs.ext.ExceptionMapper. Выполните следующие шаги: шаг 1: Создание определенного пользователя непроверенное исключения, как MyApplicationException:

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

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

шаг 2: Создайте определенного пользователем типа 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.

Это все и так вы выполняете более тонкую реализацию. Гарантированный ...

-2

Чтобы получить объект ответа вы можете использовать этот код:

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

Чтобы получить объект запроса:

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

Если вы получаете null ответ, то я могу видеть ответ не формируется при возврате элемента управления. Тогда единственный путь вперед - пойти с interceptors.

+2

получение ответа возвращает null! –

1

Вы можете получить ответ, по методе:

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