Java 在cdi拦截器中,验证后是否可以将用户重定向到另一个页面/方法/操作(jsf2)并发送消息?

Java 在cdi拦截器中,验证后是否可以将用户重定向到另一个页面/方法/操作(jsf2)并发送消息?,java,jsf-2,java-ee-6,cdi,interceptor,Java,Jsf 2,Java Ee 6,Cdi,Interceptor,这个想法是这样的: @伪随机码 @阿隆登沃克 public Object manage(InvocationContext ic) throws Exception { Object object = getTarget(); ... if( businessValidation(object).equals("fail") ){ return <ERROR MESSAGE + REDIRECT> }

这个想法是这样的:

@伪随机码

@阿隆登沃克

public Object manage(InvocationContext ic) throws Exception {

    Object object = getTarget();
            ...
            if( businessValidation(object).equals("fail") ){
        return <ERROR MESSAGE + REDIRECT>
    }
    return ic.proceed();
}
公共对象管理(InvocationContext ic)引发异常{
Object=getTarget();
...
if(businessValidation(object).equals(“fail”)){
返回
}
返回ic.procedure();
}
如有任何帮助,将不胜感激


提前感谢

引发特定/自定义异常,并为此设置特定的

例如

web.xml中使用


com.example.BusinessValidationException
/WEB-INF/errorpages/businessvalidationfailed.xhtml
请注意,每当您希望在ajax请求上处理此异常时,您都需要一个自定义异常处理程序,并且您需要一个自定义servlet过滤器来打开可能由JSF或EL自动包装的Faces或EL异常。JSF实用程序库为这两者提供了一个解决方案



与具体问题无关,JSF中的业务验证通常使用JSF
验证器
,而不是Java EE
拦截器

来执行。这个替代方案也可以工作,这正是我想要的

@AroundInvoke
public Object intercept(InvocationContext ic) throws Exception {

    BaseBean<? extends BaseEntity> bean = (BaseBean<?>)ic.getTarget();
    RealmEnum realm = bean.getRealm();
    ActionEnum action = ic.getMethod().getAnnotation(AccessControl.class).action();
    if(!checkAuth(realm, action)){
        return bean.getClass().getMethod("cancel").invoke(bean);
    }
    return ic.proceed();
}
@AroundInvoke
公共对象拦截(InvocationContext ic)引发异常{

BaseBeanthanks,这很有帮助。尝试一下jsf验证器和/或web.xml错误页面映射。
@AroundInvoke
public Object intercept(InvocationContext ic) throws Exception {

    BaseBean<? extends BaseEntity> bean = (BaseBean<?>)ic.getTarget();
    RealmEnum realm = bean.getRealm();
    ActionEnum action = ic.getMethod().getAnnotation(AccessControl.class).action();
    if(!checkAuth(realm, action)){
        return bean.getClass().getMethod("cancel").invoke(bean);
    }
    return ic.proceed();
}