检查会话是否存在 JSF
我有一个登录页面,其中有一个 User bean 来验证一个人的用户名和密码。该 Bean 是会话范围的。 如果有人写了一个URL并试图跳转登录页面,我如何检查并将他重定向到登录页面?
另一方面。假设我已经登录并且正在工作,突然我出去了一段时间并且我的会话过期了。当我返回并尝试与表单交互时,它会发送一条消息,提醒我会话过期。发生这种情况时,如何再次重定向到登录表单?
提前致谢。希望我能解释一下自己。
莫贾拉 2.1.4、雄猫 7、战斧 1.1.11
I have a login page where I have a User bean to authenticate username and password for a person. This Bean is Session Scoped.
If someone writes a URL and tries to jump the login page, how can I check that and redirect him to the login page?
On the other hand. Suppose I have logged in and I was working and suddenly I go out for a while and my session expires. When I return and try to interact with the form it sends a message alerting me the session expiration. How can I redirecto again to the login form when this occurs?
Thanks in advance. Hope I explain myself.
Mojarra 2.1.4, Tomcat 7, Tomahawk 1.1.11
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您似乎使用了自行开发的身份验证。在这种情况下,您需要实现 servlet 过滤器。 JSF 将会话范围的托管 bean 存储为
HttpSession
的属性,因此您只需在doFilter()
方法中进行检查即可:将此过滤器映射到覆盖安全页面的 URL 模式上,例如
/app/*
。我知道这涉及 Ajax 请求?对于正常请求,您可以在
web.xml
中使用
。如果无法在web.xml
中将状态保存方法设置为客户端,如下所示,那么您需要实现自定义
ExceptionHandler
:(请注意,此特定示例导航到
viewexpired< /code>,所以它期望a
/viewexpired.xhtml
作为错误页面)以上需要通过以下
ExceptionHandlerFactory
实现:依次需要在
faces-config.xml
作为如下:You seem to using homegrown authentication. In that case, you need to implement a servlet filter. JSF stores session scoped managed beans as attributes of
HttpSession
, so you could just check on that indoFilter()
method:Map this filter on an URL pattern covering the secured pages, e.g.
/app/*
.I understand that this concerns Ajax requests? For normal requests you could have used an
<error-page>
inweb.xml
. If setting the state saving method to client inweb.xml
as followsis not an option, then you need to implement a custom
ExceptionHandler
:(note that this particular example navigates to
viewexpired
, so it expects a/viewexpired.xhtml
as error page)The above needs to be baked by the following
ExceptionHandlerFactory
implementation:which in turn needs to be registered in
faces-config.xml
as follows:如果您正在实现自己的系统,您可以向用户添加一个名为 session 的属性或其他属性。此属性可以是布尔值,因此每当会话启动时,您都可以将此属性设置为 true。编写一个名为 permission 的方法,例如:
在您想要对其进行限制的每个 jsf 页面(本例)上,您可以在最开始添加以下代码页面开头:
这将在呈现页面之前调用对象名称为 sesija 的 JSF ManagedBean,并检查您在指定方法中创建的规则是否满足。
我希望你觉得这很有用,
谢谢。
If you are implementing your own system you can add an attribute to user called session or whatever. This attribute can be boolean so whenever the session starts you can set this attribute to true. Write a method called permission for example:
On each of your jsf page (for this example) that you want to have restrictions on, you can add the following code at the very beginning of your page:
What this is going to do is call the JSF ManagedBean with object name sesija before rendering the page and check whether the rulles you've created in specified method are satisfied or not.
I hope you find this useful,
Thank you.