请问 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, 居然都不其左右,到底怎么回事呢?


多谢大家了
...全文
859 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的属性呢?
内容概要:本文围绕基于交替方向乘子法(ADMM)的多主体综合能源系统分布式协同优化展开研究,提出了一种兼顾系统整体性能与各主体隐私保护的分布式优化框架,并提供了完整的Matlab代码实现。研究详细构建了包含电、热、气等多种能源形式耦合的多主体综合能源系统模型,设计了基于ADMM算法的分布式求解机制,实现了在去中心化架构下的协同优化调度。文中深入分析了算法的迭代流程、收敛条件及关键参数(如惩罚因子)对优化性能的影响,通过仿真实验验证了该方法在提升能源利用效率、促进多能协同、降低运行成本方面的有效性,适用于园区微网、能源互联网等复杂场景下的分布式决策需求。; 适合人群:具备一定优化理论基础和Matlab编程能力的研究生、科研人员及从事综合能源系统、智能电网、分布式能源管理等相关领域的工程技术人员。; 使用场景及目标:①实现多主体综合能源系统中电、热、气等多能流的协同调度与优化运行;②解决传统集中式优化带来的数据隐私泄露和计算负担过重问题,支持去中心化的分布式决策模式;③为能源互联网、智慧园区、微电网等实际应用场景提供可复现、易拓展的算法原型与技术参考。; 阅读建议:建议读者结合所提供的Matlab代码进行动手实践,重点理解ADMM算法中增广拉格朗日函数的构造、变量更新规则及收敛判据的实现过程,关注惩罚参数设置对算法收敛速度与稳定性的影响,可进一步尝试将其拓展应用于其他分布式优化问题或与其他智能算法进行性能对比研究。

81,111

社区成员

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

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