Wildfly Swarm RESTeasy隐藏了webapp / index.html

时间:2017-07-19 17:00:04

标签: java rest jboss resteasy wildfly-swarm

我正在开发一个基于Wildfly Swarm的项目。我目前遇到的问题是RESTeasy隐藏了我的index.html(以及其他html文件),这些文件放在/ webapp下面,因为RESTeasy正在监听根级别。

我的主要应用:

@ApplicationPath("/")
public class XYZnlineApplication extends Application {
}

我的一个资源:

@Path("protected/api/admin")
public class AdminResource {
    @GET
    @Path("public/api/offer/reduced")
    @Produces("application/json")
    public List<XYZ> getXYZ() {
        ...
    }

    @GET
    @Path("protected/api/offer/full")
    @Produces("application/json")
    public List<XYZ> getAllXYZ() {
        ...
    }
}
事情是这样的。如果我启动我的wildfly swarm应用并访问上面的一个转发点,一切正常(例如http://localhost:8080/app/public/api/offer/reduced

但如果我想访问我的一个html(例如login.html)文件,这些文件直接位于/ webapp下面,我会得到一个404,尽管该文件是正确捆绑的(例如试图访问{{3 }})。所以在我看来,RESTeasy会隐藏这个html文件,因为它会监听root(/)。

由于我的url的第一部分是上下文(由代理注入),因此我无法在我的XYZApplication中将根目录(/)设置为ApplicationPath。

您对我如何解决这个问题有任何想法吗?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您需要将ApplicationPath更改为“/ services”或“/ svc”或适用于您的任何内容。最终,您需要在静态资源和服务之间对URL命名空间进行分区。在指定ApplicationPath时,您无需担心上下文。

主要编辑:
你的评论真的解释了发生了什么。我不确定您使用的是什么类型的安全性,但最终您可能需要在服务前面安装某种类型的过滤器。我会有类似的东西:

@Provider
@Priority(Priorities.AUTHENTICATION)
@PreMatching
public class AuthFilter implements ContainerRequestFilter {
    @Context
    private HttpServletRequest httpServletRequest;

    @Context
    private HttpServletResponse httpServletResponse;

    @Override
    public void filter(ContainerRequestContext containerRequestContext) throws IOException  {
        if( containerRequestContext.getUriInfo().getPath().contains("/public/") )
            return; // user is in public area - doesn't matter if they are authenticated

        // guess at how to check if user is authenticated
        if( httpServletRequest.getSession().get("user_is_ok") )
            return;

        httpServletResponse.sendRedirect("/login");
        // or maybe
        httpServletResponse.sendError(SC_UNAUTHORIZED);   
    }
}

同样,这是一个猜测,但这是处理挑战的一种非常常见的方式。