2015-05-21 3 views
1

У меня есть много веб-сервисов REST, разработанных с помощью CXF и управляемых в контейнере весеннего приложения, и мне было поручено создать сервлет, который создаст объект сеанса, который будет хранить атрибуты, которые будут прочитаны в службах Jax-RS ,Как добавить сервлет сеанса/входа, чтобы получить объект сеанса для бэкэнд Spring-Apache CXF?

Я попытался просто добавить простой сервлет JEE для сбора параметров и создания объекта сеанса, но тогда я не мог понять, как вводить этот объект сеанса для использования во всем приложении. Я также попытался добавить Spring-mvc и springweb в приложение и использовать диспетчерский сервлет, который должен облегчить получение объекта сеанса в каждом из бэндов webservice. Добавление двух зависимостей для простого сервлета кажется излишним, и, кроме того, spring-mvc, похоже, не играет хорошо с Jax-RS, путь «/ rest /», в котором у меня были все сервисы, запущенные раньше, кажется, by spring-mvc (jax-rs больше не может инициализировать конечные точки на этом пути), хотя я использую совершенно другой путь для сеансового сервлета.

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
@RequestMapping("/session") 
public class SessionController { 

@RequestMapping(method = RequestMethod.GET) 
public String doGet(ModelMap model) { 
    return "sessionPage"; 
} 

@RequestMapping(method = RequestMethod.POST) 
public String doPost(ModelMap model) { 
    return "redirect:mainpage"; 
    } 
} 

На данный момент интерфейс находится в React.js, все взаимодействия с бэкэнд являются через REST службы вызовов. Я пытаюсь добавить страницу «входа» в JSP, это еще не страница входа в систему, ей просто нужно получить userId на данный момент и сделать доступным для бэкэнд.

import org.apache.cxf.Bus; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.ImportResource; 

@Configuration 
@ImportResource({"classpath:META-INF/cxf/cxf.xml", "classpath:META- INF/cxf /cxf-servlet.xml"}) 
public class CXFSetup { 

@Autowired 
private Bus cxfBus; 
} 

ответ

1

Я попытался просто добавить простой JEE сервлет собрать параметры и создать объект сессии, но тогда я не мог понять , как вводить этот объект сеанса для использования в течение всего применения ,

Вы можете вводить текущий объект запроса к службе отдыха и извлечь из него сеанс

import javax.ws.rs.core.Context; 
import javax.servlet.http.*; 

@Path("/yourPath") 
public class SomeService { 

    @Context HttpServletRequest request; 

    @POST 
    @Consumes("application/json") 
    @Produces("application/json") 
    public Object serviceMethod(){ 

     HttpSession session = request.getSession(false); 
     session.getAttribute(.....) 
Смежные вопросы