Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 在WebLogic 12c中防止匿名访问远程EJB访问_Jakarta Ee_Weblogic12c - Fatal编程技术网

Jakarta ee 在WebLogic 12c中防止匿名访问远程EJB访问

Jakarta ee 在WebLogic 12c中防止匿名访问远程EJB访问,jakarta-ee,weblogic12c,Jakarta Ee,Weblogic12c,我在WebLogic12c中部署了一个包含EJB的WAR。我发现我可以从独立客户端访问EJB,而不需要在InitialContext中指定用户名/密码。有没有办法防止在战争中匿名访问所有EJB 让我困惑的是,我需要提供正确的用户名/密码进行身份验证(错误的密码将导致身份验证失败)。但是我可以省略用户名/密码(在InitialContext属性中),它允许我访问EJB 因此,我希望配置Weblogic,使其始终需要用户名/密码才能访问任何EJB。如果我省略了用户名/密码,它将不允许我访问EJB 我

我在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>