把可以访问的页面地址(url)保存到数据库中,用户登录后把他们存放到一个数组中,然后扩展jsf的PhaseListener类,在这个扩展类中(假如叫listener.SecurityPhaseListener)afterPhase(PhaseEvent event)事件编写过滤函数,如果用FacesContext.getCurrentInstance().getViewRoot().getViewId()取到的url存在于数组,如果有操作权限则放过,否则则禁止操作,如果数组中不存在,则也同样放过(目的是不能阻止通过页面导向).
但使用其他的过滤器会对jsf产生冲突.
jsf的配置文件中需要添加:
<!-- 权限控制 -->
<lifecycle>
<phase-listener>
listener.SecurityPhaseListener
</phase-listener>
</lifecycle>
过两天我把完整的代码整出来.
<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_sdo.js" type="text/javascript"></script>