如何创建从Web服务到Servlet的请求重定向(使用泽西岛2.27)

时间:2018-12-20 09:10:50

标签: java servlets jax-rs jersey-2.0

我想避免直接从客户端(即前端)使用servlet调用。我只想对Web服务使用安全过滤器。如果客户端单击指向另一个页面的链接,则会发生以下情况:向Web服务发出AJAX请求,然后该请求通过过滤器,该过滤器检查用户的Autenitifikacija是否具有令牌或资源。请求具有注释@PermitAll的方法,以及类似的检查...。  在请求到达资源方法之后,资源方法将请求重定向到所需的servlet,从而为客户端提供所需的页面。

我现在有这个

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");
            }

        }
    });

}

由事件调用和处理此函数时,我必须将客户端定向到所需的页面,因此在这种情况下,我不想为Servlet写更多的安全过滤器,我想答案到资源方法

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;
}

提示如何完成,可以在某个地方举个例子,并附上解释吗?

更新

我做了以下

@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(这是servlet)和AuthorizationResource

之间抛出了一个圈。

这是为了显示调试器。

为什么? 如何纠正?

enter image description here

0 个答案:

没有答案