Jakarta ee 在WebLogic 12c中防止匿名访问远程EJB访问
我在WebLogic12c中部署了一个包含EJB的WAR。我发现我可以从独立客户端访问EJB,而不需要在InitialContext中指定用户名/密码。有没有办法防止在战争中匿名访问所有EJB 让我困惑的是,我需要提供正确的用户名/密码进行身份验证(错误的密码将导致身份验证失败)。但是我可以省略用户名/密码(在InitialContext属性中),它允许我访问EJB 因此,我希望配置Weblogic,使其始终需要用户名/密码才能访问任何EJB。如果我省略了用户名/密码,它将不允许我访问EJBJakarta ee 在WebLogic 12c中防止匿名访问远程EJB访问,jakarta-ee,weblogic12c,Jakarta Ee,Weblogic12c,我在WebLogic12c中部署了一个包含EJB的WAR。我发现我可以从独立客户端访问EJB,而不需要在InitialContext中指定用户名/密码。有没有办法防止在战争中匿名访问所有EJB 让我困惑的是,我需要提供正确的用户名/密码进行身份验证(错误的密码将导致身份验证失败)。但是我可以省略用户名/密码(在InitialContext属性中),它允许我访问EJB 因此,我希望配置Weblogic,使其始终需要用户名/密码才能访问任何EJB。如果我省略了用户名/密码,它将不允许我访问EJB 我
我希望容器支持这种安全性,而不是试图自己实现一些东西。您可以定义一个默认的拦截器,并在那里执行一些角色检查 拦截器是这样的:
public class LoginCheckInterceptor {
@Resource
private EJBContext ejbContext;
@AroundInvoke
public Object checkLogin(final InvocationContext context) throws Exception {
if (userAuthenticated()) {
return context.proceed();
} else {
throw new SecurityException("User not authorized");
}
}
private boolean userAuthenticated() {
// do role checking as needed
// use this.ejbContext.isCallerInRole(...)
// or this.ejbContext.getCallerPrincipal()
}
}
要使其作为默认拦截器(适用于所有ejb),请自定义部署描述符ejb-jar.xml:
您的.package.LoginCheckInterceptor
*
您的.package.LoginCheckInterceptor
我应该澄清,我感到困惑的是,我需要提供正确的用户名/密码进行身份验证(错误的密码将导致身份验证失败)。但是我可以省略用户名/密码(在InitialContext属性中),它允许我访问EJB。因此,我希望配置Weblogic,使其始终需要用户名/密码才能访问任何EJB。(我会在我的问题中补充这一点)。恐怕没有标准的方法。据我所知,EJB规范中没有任何与此相关的内容。当然,可能会有一些Weblogic扩展,但我无能为力。我提出的解决方案将保证在没有经过身份验证的情况下不能调用任何EJB方法。
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar>
<interceptors>
<interceptor>
<interceptor-class>your.package.LoginCheckInterceptor</interceptor-class>
</interceptor>
</interceptors>
<assembly-descriptor>
<interceptor-binding>
<ejb-name>*</ejb-name>
<interceptor-class>your.package.LoginCheckInterceptor</interceptor-class>
</interceptor-binding>
</assembly-descriptor>
</ejb-jar>