【问题标题】:How to get the HttpServletRequest within a velocity tool?如何在速度工具中获取 HttpServletRequest?
【发布时间】:2016-03-18 11:45:07
【问题描述】:

我想实现一个速度工具,它提供了一种方法来找出用户是否登录的天气。我正在使用 VelocityLayoutServlet 来呈现每个请求的模板。

我的 velocity-tools.xml 如下所示:

<tools>
    <toolbox scope="request">
       <tool key="user" class="UserTool"/>
    </toolbox>
</tools>

我的工具类:

public class UserTool{

    // How do I get this object?
    private HttpServletRequest request;

    public boolean isLoggedIn(){
        return !request.getUserPrincipal().getName().isEmpty();
    }

}

如何在我的工具中获取HttpServletRequest 对象?

仅供参考:我正在使用容器管理的身份验证。

【问题讨论】:

    标签: java tomcat authentication servlets velocity


    【解决方案1】:

    这有两个缺陷:

    1. 如果请求是匿名的,您将收到 NullPointerException
    2. 您的工具是多余的,因为 Velocity 捆绑的 Servlet 应该已将请求添加到上下文中:$request.remoteUser

    request 范围不表示 HTTP 请求。简单地说,这个工具会在每次渲染请求时重新创建。

    【讨论】:

    • 感谢您的回答,现在我更进一步了。现在我可以从模板文件中访问用户。但是我只需要在用户登录时渲染模板的某些部分。我该怎么做? $request.remoteUser.isEmpty() 仅在用户登录时有效。
    • @eztam 不要使用isEmpty,您可能会遇到 NPE。理想情况下,您使用角色:$request.isUserInRole。如果您关心身份验证,请仅使用此成语#if ($request.remoteUser) ... #end。见here
    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多