Как создать перенаправление запроса от веб-службы к сервлету (используется Jersey 2.27) - PullRequest
0 голосов
/ 20 декабря 2018

Я бы не хотел использовать вызов сервлета напрямую от клиента, то есть со стороны внешнего интерфейса.Я хотел бы использовать фильтры безопасности для веб-служб и только.В случае, когда клиент нажимает на ссылку, которая указывает на другую страницу, происходит следующее: веб-службе передается AJAX-запрос, прежде чем он проходит фильтр, который проверяет Autenitifikacija пользователя, имеет ли он токен или ресурсметод, к которому запрос имеет аннотацию @PermitAll, ну и подобные проверки .... После того, как запрос пришел к методу ресурса, метод ресурса перенаправляет запрос на нужный сервлет, который дает клиенту требуемую страницу.

У меня есть это прямо сейчас

function handlerEventsOnRadioBtn() {

    $('.radioAuth').on('click keypress', function(e) {
        if (!$(this).hasClass('clicked')) { 
            $(this).addClass('clicked');
            var value = $(this).val();

            outputMessage(".messageRadio", "");
            outputMessage(".messageRadio", "Choice: " + value, "green");

            console.log('First click'); 


        } else { 
            $(this).removeClass('clicked'); 


            if (e.key === 'Enter' || e.type === 'click') {
                if (value === "repairAuth"){

                    //authRepair("api/auth/repairAccount");
                    window.location.href = "/index.html";
                    outputMessage(".messageRadio", " send to server - " + value, "blue");
                }
                outputMessage(".messageRadio", "send to server - " + value, "blue");
            }

        }
    });

}

Когда эта функция вызывается и обрабатывается событием, тогда я должен направить клиента на нужную страницу, поэтому здесь я не хотел бы писатьдля таких случаев больше фильтров безопасности для сервлетов, я бы хотел, чтобы ответ шел к методу ресурса

authRepair("api/auth/repairAccount");

AJAX-запрос отправляет запрос GET

function authRepair(uri){

$.ajax({
    method: "GET",
    url: uri,
    success: function () {
    },
    error: function (error) {
        outputMessage(".authenticationMessage", "err", "red");
    }
});
}

На стороне сервера что-товот так

@GET
@PermitAll
@Path("repairAccount")
public Response redirectToRepair(){
    ServletContext servletContext =
            (ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
    servletContext.getRequestDispatcher(VIEW_URL);
    /*???? Response response = Response.ok().build();*/
    return response;
}

Подскажите, как это можно сделать, может где-нибудь есть пример, с объяснениемns?

ОБНОВЛЕНИЕ

Я сделал следующее

@WebServlet("/home")
public final class Home extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        final String viewUrl = "/WEB-INF/pages/home.html";

        RequestBean bean = new RequestBean();
        bean.setPage(viewUrl);
        bean.setRequest(request);
        bean.setResponse(response);

        request.setCharacterEncoding("UTF-8");
        forwardToView(bean);
    }
}

, а затем

@Provider
@Produces( MediaType.APPLICATION_JSON )
@Consumes( MediaType.APPLICATION_JSON )
@Path( "authorization" )
public class AuthorizationResource {

    private static final String VIEW_URL = "/WEB-INF/pages/home.html";
    @Resource
    private WebServiceContext context;

    @POST
    @PermitAll
    @Path( "home" )
    public Response authenticateUserName(@Context ServletContext context){

        UriBuilder builder = UriBuilder.fromPath(context.getContextPath());
        builder.path("/home");

        URI buildUri = builder.build();
        Response.ResponseBuilder responseBuilder = Response.seeOther(buildUri);
        Response response = responseBuilder.build();

        return response;

    }

}

Это на стороне клиента

function redirectUrlOld(uri, token, selector){

$.ajax({
    type: "POST",
    url: uri,
    contentType: 'application/json',
    beforeSend : function(request) {
        request.setRequestHeader('Authorization', makeHeaderWithJwt(token));
    },
    success: function () {
    console.log("success!")
    },
    error: function (error) {
        console.log("error!")
    //    messageErr(error,selector);
    }
});
}

Консоль указывает, что запрос AJAX возвращает успех.Но запрос по кругу брошен между классами Home (это сервлет) и AuthorizationResource

Это показано на отладчике.

Почему?Как это исправить?

введите описание изображения здесь

...