/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.zople.filter;
import com.zople.login.bean.LoginUserSession;
import com.zople.login.bean.UserSessionBean;
import com.zople.util.EnSystemConfig;
import javax.faces.application.Application;
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*@描 述: JSF拦截器
*@ author: yuzhi2217@yuxia2217@163.com
*@version: 1.0
*/
public class ActionFilter implements PhaseListener {
final Logger logger = LoggerFactory.getLogger(ActionFilter.class); //日志管理
public ActionFilter(){
}
@Override
public void afterPhase(PhaseEvent event) {
PhaseId phaseId = event.getPhaseId();
// System.out.println("phaseId: " + phaseId);
// System.out.println("输出拦截=========2");
//
//生命周期
if (phaseId == PhaseId.RESTORE_VIEW ) {
//|| phaseId == PhaseId.INVOKE_APPLICATION) {
FacesContext currentContext = FacesContext.getCurrentInstance();
String viewId= currentContext.getViewRoot().getViewId();
// System.out.println("dddddddddddddd==="+viewId);
//ViewId 就是我们需要的路径,类似URL,如/noPermission.xhtml
if(null!=viewId&&viewId.contains(EnSystemConfig.EN_ADMIN_URL)){
String isEnabled = "false";
isEnabled=loggedIn(viewId);
if(isEnabled.equals("NoPurview")){
// 没有权限
// logger.info("NoPurview");
gotoNoPermissionPage();
}else if(isEnabled.equals("false")){
//没有登录
// logger.info("没有登录");
gotoNoSessionPage();
}
}
// System.out.println("afterPhase: " + viewId);
// System.out.println("phaseId: " + phaseId);
// System.out.println("PhaseId.RESTORE_VIEW==="+ PhaseId.RESTORE_VIEW);
// System.out.println("PhaseId.INVOKE_APPLICATION=="+PhaseId.INVOKE_APPLICATION);
}
}
/*没有Session**/
private void gotoNoSessionPage() {
FacesContext currentContext = FacesContext.getCurrentInstance();
NavigationHandler nh = currentContext.getApplication().getNavigationHandler();
nh.handleNavigation(currentContext, null, "logout");
}
/* 没权限 */
private void gotoNoPermissionPage() {
FacesContext currentContext = FacesContext.getCurrentInstance();
NavigationHandler nh = currentContext.getApplication().getNavigationHandler();
nh.handleNavigation(currentContext, null, "noPurview");
}
@Override
public void beforePhase(PhaseEvent event) {
// System.out.println("输出拦截===========1");
}
@Override
public PhaseId getPhaseId() {
return PhaseId.ANY_PHASE;
}
//验证是否已经登陆
private String loggedIn(String url) {
UserSessionBean userSessionBean = LoginUserSession.getInstance().getSessionBean(EnSystemConfig.EN_USER_SESSION);
if(null!=userSessionBean&&null!=userSessionBean.getUserId()){
// System.out.println("输出SessionName========sdfsdfsd==f========="+url);
if(null!=userSessionBean.getMemberLevels()){
if(!userSessionBean.getMemberLevels().getIsBuy()&&url.contains(EnSystemConfig.EN_IS_BUY_URL)){
return "NoPurview";
}
if(!userSessionBean.getMemberLevels().getIsMerchants()&&url.contains(EnSystemConfig.EN_IS_MERCHANTS)){
return "NoPurview";
}
if(!userSessionBean.getMemberLevels().getIsMachining()&&url.contains(EnSystemConfig.EN_IS_MACHINING)){
return "NoPurview";
}
}
return "true";
}
return "false";
}
}
配置文件
faces-config.xml
<lifecycle>
<phase-listener>com.zople.filter.ActionFilter</phase-listener>
</lifecycle>
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/pages/member/login_out.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>noPurview</from-outcome>
<to-view-id>/pages/error/purview.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
分享到:
相关推荐
- **拦截器**:掌握如何使用拦截器对请求进行预处理或后处理,增强应用的安全性和功能性。 - **集成测试**:学会编写集成测试来验证Seam应用的功能和性能。 #### 四、综合运用 **1. 结合JSF2与JBoss Seam** - **...
同时,Struts2的拦截器可以应用于JSF的请求处理,提供了更多的控制和灵活性。 集成步骤大致如下: 1. 添加Struts2和JSF的依赖到项目的类路径。 2. 在Struts2配置文件(struts.xml)中声明JSF插件。 3. 创建JSF的...
JSF可以与CDI(Contexts and Dependency Injection)框架集成,利用CDI的强大功能,如依赖注入、事件和拦截器,提升应用的可扩展性和可维护性。 九、JSF的版本 JSF有两个主要版本:JSF 2.x和JSF 3.x。JSF 2.x引入了...
- 整合Struts2和JSF可以充分利用各自的优点,如Struts2的拦截器机制和JSF的组件库。 - 但需要注意的是,整合可能会增加系统的复杂性,需要对两个框架有深入的理解,才能有效地解决可能出现的问题。 通过上述讲解...
7. ** faces-config.xml**:这是JSF的配置文件,用于注册组件、导航规则、监听器和拦截器等。然而,JSF2鼓励使用注解进行配置,以减少XML的使用。 8. **CDI集成**:JSF2与CDI(Contexts and Dependency Injection)...
JSF以其组件化和EL的强大功能,适合大型企业级应用,而Struts2则以灵活的拦截器和插件系统,更适合快速开发。在实际项目中,开发者可以根据团队的技术栈、项目规模以及对灵活性的需求来选择合适的框架。 总的来说,...
在每个阶段,开发者都可以通过编写特定的事件监听器或拦截器来进行自定义处理。 **EL(Expression Language)**是JSF中的表达式语言,用于访问和操作bean的属性,也可以在JSP页面中直接用来显示或设置bean的值。EL...
- **整合拦截器和生命周期**: 对于支持拦截器的框架如WebWork2,可以将Spring的AOP拦截器与框架的拦截器链结合起来,实现更细粒度的控制。 - **使用Spring的标签库**: Spring提供了丰富的标签库,如spring-form,...
- `web.xml`: Web应用部署描述符,配置JSF拦截器和其他设置。 - `.xhtml` 文件:Facelets 视图,包含UI组件和数据绑定。 - `Managed Beans`: 业务逻辑组件,与视图进行数据交互。 5. **Managed Bean** 在...
- 通过配置 Spring Security 过滤器,可以拦截并处理用户的登录请求,同时在 JSF 页面上展示相应的权限控制。 5. **AOP 在 JSF 中的应用**: - Spring 的 AOP 功能可以在 JSF Managed Bean 的方法调用前后添加切...
- **XML配置文件**(web.xml):定义应用程序的基本设置,如初始化参数和拦截器。 - **Facelets模板**:使用Facelets作为视图层,这是一种基于XML的标记语言,用于定义页面布局和组件。 - **Managed Beans**:用于...
手册和教程将涵盖Struts2的配置、拦截器、Action类、结果类型、国际化和异常处理等内容,帮助开发者深入理解和应用这一框架。 最后,"JavaEE5_API.chm"是Java Enterprise Edition 5的API文档。Java EE提供了丰富的...
5. 面向切面编程(AOP):JSF支持拦截器(Interceptor),允许在特定阶段执行代码,实现AOP特性。 6. 事件处理:JSF使用事件驱动的方式处理用户操作。组件可以监听和触发事件,通过事件监听器进行响应。 7. 转换和...
JavaScript全栈框架(JSF,JavaServer Faces)是Java平台上用于构建Web应用程序的一种技术,它提供了丰富的组件库和事件处理...同时,它也为探索高级特性,如自定义组件、拦截器、过滤器和异步请求处理等提供了基础。
JSF的核心概念包括组件、事件、渲染器和生命周期,它简化了Web界面与后端数据的交互。 在登录程序中,JSF通常会有一个用于输入用户名和密码的表单组件,以及一个提交按钮。当用户点击提交时,JSF会处理这些组件的值...
4. **拦截器**:Struts2引入了拦截器概念,允许在请求处理前进行预处理或在处理后进行后续操作,增强了业务逻辑的组织和复用能力。 5. **插件生态**:Struts拥有丰富的第三方插件,如Struts2-Concurrent、Struts2-...
Struts2的核心在于Action类,它是业务逻辑的载体,通过Interceptor拦截器进行处理,实现了请求和响应的分离。此外,Struts2支持多种结果类型和视图技术,如JSP、FreeMarker、Velocity等。 **JSF** JSF是Java平台上...
大家下载下来之后 ,照着里面的代码写下去就行了。里面的内容包括了以下: Struts2的拦截器 Struts2整合JSF Struts2整合Ajax Struts2的国际化(Internationalization) Struts2标签库 Struts2整合Hibernate及Spring
**JSF与MVC模式** JSF遵循Model-View-Controller设计模式,其中Managed Beans代表模型,Facelets页面代表视图,而JSF本身作为控制器处理用户交互和数据传递。 **CDI(Contexts and Dependency Injection)** 自JSF ...