请问 JSF 如何在页面判断用户权限,对未登陆用户直接跳转

keeper209 2007-01-08 01:48:01
我有一个session bean,记录登陆用户的用户名和权限

如何保护一个jsf页面,不让未登陆的用户访问呢, 在backbean里面可以通过检测,让其操作无效或者隐藏JSF的控件, 可是我希望没登陆的用户打开这个页面的时候直接跳转到登陆页面。

JSF页面可以用 <c:redirect url="index.faces"/> 跳转,可是这个条件判断怎么作呢? 看了一篇文章,说可以用JSF 和 JSTL 操作同一个backing bean

<f:view>

<jsp:useBean class="user.Login" id="login" scope="session"/>
<c:if test="$ {login.name==null}">
<c:redirect url="index.faces"/>
</c:if>
。。。。。。。。。。以下省略,

奇怪的是 如果<c:if test="true"> 那么下面的跳转就执行了,可是用判断
login.name==null 或者 login.name!=null, 居然都不其左右,到底怎么回事呢?


多谢大家了
...全文
792 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
keeper209 2007-01-08
  • 打赏
  • 举报
回复
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>

<jsp:useBean class="arbeit.Login" id="login" scope="session"/>
<%
if (login.getName()==null){
%>
<c:redirect url="index.faces"/>
<% } %>

用jsp语句可以直接得到session bean的属性,哈哈,昨天试验的时候居然没成功,我还以为jsf和jsp 不能共用呢,可能是没写对,轻易放弃了。
keeper209 2007-01-08
  • 打赏
  • 举报
回复
先谢谢,我以前只在页面用纯jsf标签,以前其实没学过jsp呵呵,跳跃了一些,按照hornbilltofy的方法试了一下,我的bean是 arbeit.Login,替换了一下
其他不变

引人3个包.....
<%@ page import="arbeit.Login"%> 这个是包名.bean名字
<%
ValueBinding binding = Util.getValueBinding("#{login}");
login user=(login) binding.getValue(FacesContext.getCurrentInstance());
String path = request.getContextPath();
if(user.name==null){
out.print("<script language='JScript'>self.parent.location='"+basePath+"';</script>");}
%>


报错Generated servlet error:
login cannot be resolved to a type

不知是不是哪儿没有改写,还是有什么事项没注意到,再次麻烦您帮忙看看,谢谢!
icecy 2007-01-08
  • 打赏
  • 举报
回复
先頂一下了
hornbilltofy 2007-01-08
  • 打赏
  • 举报
回复
然后在每个页面都镶嵌这个判断页就可以了.
hornbilltofy 2007-01-08
  • 打赏
  • 举报
回复
没必要这么复杂,你可以做一个判断页,在这个判断页中进行检查login是否正常,如
<%@ page import="javax.faces.context.FacesContext"%>
<%@ page import="javax.faces.el.ValueBinding"%>
<%@ page import="com.sun.faces.util.Util"%>
<%@ page import="com.login"%>
<%
ValueBinding binding = Util.getValueBinding("#{login}");
login user=(login) binding.getValue(FacesContext.getCurrentInstance());
String path = request.getContextPath();
if(user.name==null){out.print("<script language='JScript'>self.parent.location='"+basePath+"';</script>");//自动返回到初始页}
%>
keeper209 2007-01-08
  • 打赏
  • 举报
回复
$ {login.name==null} 这个表达式无效,请问,这个判断应该怎么写呀,JSF 和 JSTL 能不能得到同一个session bean的属性呢?

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧