JSF的权限设计(待续)。


1. 角色受限采访URL。

    由于JSF的流程在Servlet Filter之后, 所以不能使用Filter的层面获取到JSF的一些请求路径信息,即javax.faces.context.FacesContext.getCurrentInstance()应该是空的。
    这里可以使用javax.faces.event.PhaseListener来获取请求和输出路径信息。在face-config.xml配置好即可获取到请求和输出的页面路径。例如,用户当前处于公用页面A.jsf, 现在按链接想跳转到B.jsf; JSF首先会恢复A.jsf的视图,这时PhaseListener,验证合法就输出视图到B.jsf, 这时又会来到PhaseListener 恢复视图B.jsf, 可以将鉴权的代码添加到或BeforeParse, AfterParse方法里。
    ParseListener对h:outputLink或CommandLink是应该是可行的,因为只是对链接进行限制。 如果对于CommandButton可能是不行的,例如A.jsf 点击按钮action="#{bBean.bAction}",
     public  String bAction()  {
        
//能够进入到方法内部,如果这里是很多逻辑操作,数据操作的话。。。。
        return "B_JSF";
        
//只有在return之后ParseListener才能限制鉴权,那就晚了。而链接就不同,因为它没什么逻辑操作。
    }

    这种鉴权就要用到下面提到的第二种方法。

package  web;

import  java.io.IOException;
import  javax.faces.context.ExternalContext;
import  javax.faces.context.FacesContext;
import  javax.faces.event.PhaseEvent;
import  javax.faces.event.PhaseId;
import  javax.faces.event.PhaseListener;
import  javax.servlet.ServletContext;
import  javax.servlet.ServletException;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;

import  org.apache.commons.logging.Log;
import  org.apache.commons.logging.LogFactory;

/**
 * 
@author zealvampire
 * 
@version 1.0  2006-10-17
 
*/

public   class  SecurityPhaseListener  implements  PhaseListener  {

    
private static final long serialVersionUID = 6186106530012195240L;
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值