2015-09-28 5 views
0

Является новым веб-сервисом RESTful. Я получил новое требование. Например, мне нужно создать новую веб-службу RESTful, где моя служба примет токен из вызывающей программы. Этот токен должен быть установлен в заголовок авторизации и нажать фильтр, который находится в JAR, заданный клиентом. Я создал веб-службу RESTFul, где он принимает токен из вызывающей программы. теперь как я могу установить этот токен в заголовок авторизации. PLS помочь мне с этим.Настройка заголовка авторизации в фильтре

+0

Вы проверили 'javax.ws.rs.core.HttpHeaders'? – Vaseph

+0

Я, но я хочу получить четкое представление о 'javax.ws.rs.core.HttpHeaders'. Можете ли вы показать мне пример этого PLS – Kaushi

ответ

1

контекст от этого вопроса то же самое, что и в этом сообщении - Calling a Filter before a Servlet from REST Webservice

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

Для этого вам необходимо создать HttpServletRequestWrapper и передать это фильтру. Вы бы переопределить метод getHeader (имя String) и

public class CustomHttpServletRequestWrapper implements HttpServletRequest{ 
     public CustomHttpServletRequestWrapper(HttpServletRequest request){ 
      super(request); 
     } 

     public String getHeader(String name){ 
      if(name.equals("AUTH-HEADER"){ 
        //get the original request 
        HttpServletRequest request = (HttpServletRequest)getRequest(); 
        //now get it from the original request and return 
      }else{ 
        return request.getHeader(name); 
      } 
     } 

     // TODO override getHeaderNames() 
} 

А потом передать это при вызове фильтра.

CustomHttpServletRequestWrapper requestWrapper = new CustomHttpServletRequestWrapper(request); 
request.getRequestDispatcher("/secure").include(requestWrapper, response); 
+0

Спасибо большое. Вот как я это сделал и его работа прекрасна .... :) – Kaushi

+0

зачем использовать обертку? – Gobliins

2

В обычной Java вы можете установить Authorization Header вперед Client таким образом:

String url = "test.com"; 
URL urlObj = new URL(url); 
HttpURLConnection con = (HttpURLConnection) urlObj.openConnection(); 
con.setRequestProperty("Authorization", "You Token"); 

Редактировать Просто, чтобы убедиться, что я не пропустите тему ор. Если вы хотите собрать токен для авторизации, вы должны передать этот токен пользователю после того, как пользователь вошел в систему на вашем сайте. После того, как пользователь клиента reveives маркер клиент должен отправить этот маркер с каждым запросом (быть Shure вы используете SSL для передачи)

Serverside код должен выглядеть следующим образом:

public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException { 
    String auth = req.getHeader("Authorization"); 
    //validate Token 
} 
+0

в этом случае, какой будет URL? – Kaushi

+0

Мне нужно установить заголовок авторизации на «HttpServletRequest» в моем случае. – Kaushi

+0

Хм, я не понимаю проблему правильно, как я думаю. У вас есть клиент и сервер. Клиент отправляет действительный токен аутентификации на сервер через заголовок auth. Сервер проверяет токен и выполняет требуемый запрос, если токен верен. Единственный раз, когда сервер должен отправить токен, - это когда пользователь аутентифицируется на сервере.
Если вы получаете токен от клиента на серверном сервере, он будет содержаться внутри 'HttpServletRequest', если вы хотите его обмануть клиенту, который вы должны положить он находится внутри 'HttpServletResponse' – ScreamingTree

Смежные вопросы