JavaEE全局捕获运行时异常
我想“全局”捕获一个运行时异常,现在这听起来很愚蠢,但让我解释一下。 我已经创建了一个拦截器,我在所有需要授权才能使用的EJB上使用它,每次调用一个方法时都会调用这个拦截器 请参见以下代码:JavaEE全局捕获运行时异常,java,jakarta-ee,Java,Jakarta Ee,我想“全局”捕获一个运行时异常,现在这听起来很愚蠢,但让我解释一下。 我已经创建了一个拦截器,我在所有需要授权才能使用的EJB上使用它,每次调用一个方法时都会调用这个拦截器 请参见以下代码: @Secure @Interceptor public class SecurityInterceptor { @EJB private SessionManager sessionManager; @AroundInvoke private Object securit
@Secure
@Interceptor
public class SecurityInterceptor {
@EJB
private SessionManager sessionManager;
@AroundInvoke
private Object securityCheck(InvocationContext ctx) throws Exception {
System.out.println("hello");
List<UserGroup> allowedRoles = (List<UserGroup>) ctx.getContextData().get("rolesAllowed");
sessionManager.isAuthorized(allowedRoles);
return ctx.proceed();
}
}
@Secure
@拦截器
公共类安全拦截器{
@EJB
私有会话管理器会话管理器;
@阿隆登沃克
私有对象安全检查(InvocationContext ctx)引发异常{
System.out.println(“你好”);
List allowedRoles=(List)ctx.getContextData().get(“rolesAllowed”);
sessionManager.isAuthorized(允许角色);
返回ctx.procedure();
}
}
现在,我不想在我的命名Bean中,用try-and-catch块来包围使用这些安全Bean的每个方法的主体,如下所示:
public List<Contracts> getContracts() {
List<Contracts> contracts = new ArrayList<>();
try {
contracts = contractEntityManager.getAll();
} catch (EJBTransactionRolledbackException e) {
Throwable throwable = ExceptionUtils.getRootCause(e);
if (throwable instanceof NotAuthenticatedException) {
System.out.println("Not Authenticated");
}
else if (throwable instanceof UnAuthorizedException) {
System.out.println("Not Authorized");
}
}
return contracts;
}
public List getContracts(){
List contracts=new ArrayList();
试一试{
contracts=contractEntityManager.getAll();
}捕获(EJBTransactionRolledbackException e){
Throwable-Throwable=ExceptionUtils.getRootCause(e);
if(NotAuthenticationDexception的可丢弃实例){
System.out.println(“未认证”);
}
else if(未授权异常的可丢弃实例){
系统输出打印项次(“未授权”);
}
}
归还合同;
}
因此,是否有某种方法可以全局捕获运行时异常,并在用户未经身份验证时将其重定向到登录页面,在用户未经身份验证时将其重定向到错误页面
也许我的设计总体上不好,我需要彻底反思这个想法。
请让我知道
谢谢因此,最后,您希望捕获异常的是web层中的异常。这很简单:
- 如果您仅在servlet上,请在web.xml中为您希望处理的每个异常指定
元素,例如:错误页
声明要全局处理的异常和要处理的URL,它可以是servlet、JSP或任何其他资源完全.qualified.NotAuthenticatedException /where/to/redirect/eg/login
- JAX-RS与
提供了类似的机制:javax.ws.RS.ext.ExceptionMapper
@Provider 公共类NotAuthenticationDexceptionMapper实现ExceptionMapper{ ... }