[英]Testing if a User is Logged in Via JSP/Spring-MVC
使用Spring 3 MVC和JSP,我只想测试用户是否已登录,我对目前使用Spring Security不感兴趣
<jsp:useBean id="myAppUser" type="com.xxx.MyUser" beanName="myUser" scope="session" />
<c:choose>
<c:when test="myUser.loggedIn">
//dostuff
</c:when>
<c:otherwise>
//dootherstuff
</c:otherwise>
</c:choose>
但问题是,当会话中还没有myAppUser时,jsp:useBean会抛出异常。 现在我意识到我可以拥有JSP:useBean实际上通过给它一个类来实例化该对象,但是我不想知道某个JSP片段中的某个地方我将对象实例化并添加到我的会话中,所以我要么总是为该用户设置一个初始值,并以编程方式控制它,或者我想要一种方法来获取允许它为null或不存在的bean,如果它不存在则返回null
无论哪种方式都没关系
如果我的问题指向我应该做的事情的根本误解,请提供一个文档的链接,将彻底解释这个用例
这不是正确的方法,但实际上您可以使用JSTL <c:catch>
解决特定问题。
<c:catch var="e">
<jsp:useBean id="myAppUser" type="com.xxx.MyUser" beanName="myUser" scope="session" />
</c:catch>
<c:choose>
<c:when test="${empty e && myUser.loggedIn}">Logged in</c:when>
<c:otherwise>Bean doesn't exist or user is not logged in</c:otherwise>
</c:choose>
在回答matt b时描述了正确的方法。 你真的需要在更高的层次上解决它。 有一个像UserManager
这样的bean,它有一个User
作为子属性,有几个方法,比如login(User)
, logout()
和isLoggedIn()
。 如果用户已登录,则User
应该是非空的。 当用户注销时, User
应该设置为null。
根据评论进行更新 :作为替代方案,您还可以删除整个jsp:useBean
声明并拦截会话中注入${myUser}
的MVC框架。
<c:choose>
<c:when test="${myUser.loggedIn}">Logged in</c:when>
<c:otherwise>Bean doesn't exist or user is not logged in</c:otherwise>
</c:choose>
EL将透明地“抑制”潜在的nullpointerexceptions并返回false。
测试“这个人登录了吗?” 通过检查View类中的Session对象,模糊了Model,View和Controller的角色之间的界限。
无论找出正确的JSTL语法来使用jsp:useBean
不会抛出异常,我建议将登录检查移到控制器端,如果模型中存在“isLoggedIn”属性,则进行视图测试。
isLoggedIn
添加到模型中,其值为true
或false
。 ${isLoggedIn}
的值。 换句话说,该视图应被检查只对属性/数据模型,而不是直接访问会话或其他状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.