0

Java servlet 中如何管理堆栈溢出标头之类的东西?如果您已登录,则标题与未登录时不同,但您仍然可以搜索和使用该站点。

我目前正在通过单个 servlet 向我的各种请求处理程序发送请求,这些请求处理程序依次转发到 JSP;我是否必须在每个请求处理程序中实现逻辑,该逻辑设置一个属性信号,指示用户是否登录,然后是if else JSTLJSP 中的一个块或什么?有没有办法在控制器 servlet 中管理它?

我所看到的管理登录用户的所有模式似乎都求助于重定向到登录/注册页面,但我不希望一个全有或全无的系统强制用户登录以使用该站点,只是一个不同的标题,如堆栈溢出。

4

1 回答 1

1

首先你需要一个地方来存储用户信息,我会得到一个数据库设置并使用像 Hibernate 这样的东西。然后你需要一种方法来使用该信息来指定用户并允许然后登录,我会推荐 Spring Security。我个人最喜欢获取这两个框架的教程/指南的网站是 Mkyong。这是关于弹簧安全的一个http://www.mkyong.com/spring-security/spring-security-hello-world-example/

这是从我从事的项目中获取经过身份验证的用户的代码示例,此示例具有从数据库中检索的用户对象。

public static User currentUser() {
    if (SecurityContextHolder.getContext() != null && 
            SecurityContextHolder.getContext().getAuthentication() != null && 
            SecurityContextHolder.getContext().getAuthentication().getPrincipal() != null &&
            SecurityContextHolder.getContext().getAuthentication().getPrincipal() instanceof User) {
        //logger.debug(className, "currentUser", "User: " + SecurityContextHolder.getContext().getAuthentication().getPrincipal());
        return (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    } else {
        return null;
    }
}  

在 Jsp 中,它会读到类似这样的内容

<c:if test="${esFn:currentUser() not null}">Your logged in!!!</c:if>

esFn 是 functions.tld 中定义的函数,如下所示

<function>
    <name>currentUser</name>
    <function-class>com.test.User</function-class>
    <function-signature>
        com.test.User currentUser()
    </function-signature>
</function>
于 2013-09-12T17:15:30.247 回答