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();
}