首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何解决“即使在InitialContext中指定了正确的用户,用户<anonymous>也没有足够的权限访问EJB”

在解决“即使在InitialContext中指定了正确的用户,用户<anonymous>也没有足够的权限访问EJB”这个问题时,首先需要了解EJB(Enterprise JavaBeans)的概念、分类、优势和应用场景。

EJB是Java EE(Java Enterprise Edition)规范中的一种组件模型,用于开发分布式企业级应用程序。它提供了一种基于服务器的组件模型,用于构建可重用、可扩展和可维护的企业级应用程序。

EJB可以分为三种类型:会话Bean(Session Bean)、实体Bean(Entity Bean)和消息驱动Bean(Message-Driven Bean)。会话Bean用于处理客户端请求,实体Bean用于持久化数据,消息驱动Bean用于异步消息处理。

EJB的优势包括:

  1. 分布式事务管理:EJB容器提供了事务管理机制,确保在分布式环境中的数据一致性。
  2. 安全性:EJB容器提供了安全性机制,可以对方法和资源进行权限控制。
  3. 事务管理:EJB容器提供了声明式事务管理,简化了事务处理的代码编写。
  4. 组件重用:EJB提供了组件化的开发模型,可以实现组件的重用和解耦。

EJB的应用场景包括:

  1. 企业级应用程序:EJB适用于开发大型的企业级应用程序,如电子商务平台、客户关系管理系统等。
  2. 分布式系统:EJB提供了分布式事务管理和远程调用的能力,适用于构建分布式系统。
  3. 高并发应用:EJB的容器管理机制可以有效地处理高并发请求。

针对上述问题,如果在InitialContext中指定了正确的用户,但用户<anonymous>仍然没有足够的权限访问EJB,可能是由于以下原因导致的:

  1. EJB权限配置不正确:需要检查EJB的权限配置,确保用户<anonymous>具有访问相应EJB的权限。可以通过在EJB类或方法上使用注解或配置文件进行权限控制。
  2. 安全域配置不正确:需要检查安全域(Security Domain)的配置,确保用户<anonymous>所属的安全域具有访问相应EJB的权限。安全域定义了一组安全策略和权限规则,用于控制用户对EJB的访问。
  3. 认证和授权机制配置不正确:需要检查认证和授权机制的配置,确保用户<anonymous>能够成功认证并获得相应的授权。可以使用Java EE提供的认证和授权机制,如JAAS(Java Authentication and Authorization Service)。
  4. EJB容器配置不正确:需要检查EJB容器的配置,确保容器正确加载和管理EJB,并正确处理用户的认证和授权请求。

对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,无法给出具体的产品推荐和链接地址。但腾讯云作为一家知名的云计算服务提供商,提供了丰富的云计算产品和解决方案,可以根据具体需求选择适合的产品和服务。

总结:解决“即使在InitialContext中指定了正确的用户,用户<anonymous>也没有足够的权限访问EJB”这个问题,需要检查EJB的权限配置、安全域配置、认证和授权机制配置以及EJB容器配置,确保用户具有访问相应EJB的权限,并正确处理用户的认证和授权请求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • was ejb学习[通俗易懂]

    大家好,又见面了,我是你们的朋友全栈君。 最近因为项目需要,对ilog进行了学习,包括ilog在was的安装以及客户端连接ilog等内容。 个人感觉很多是通过ejb来进行查找及调用的,所以,特意自己做了一个ejb在was上部署以及客户端连接的例子: [b][color=red]1、ejb方面[/color][/b] ejb采用ejb 2,分三个类:Hello、HelloHome、HelloWord; [color=cyan]Hello:[/color] public class Hello implements SessionBean { /** The session context */ private SessionContext context; public Hello() { super(); // TODO Auto-generated constructor stub } /** * Set the associated session context. The container calls this method * after the instance creation. * * The enterprise bean instance should store the reference to the context * object in an instance variable. * * This method is called with no transaction context. * * @throws EJBException Thrown if method fails due to system-level error. */ public void setSessionContext(SessionContext newContext) throws EJBException { context = newContext; } public void ejbCreate() throws EJBException, RemoteException { // TODO Auto-generated method stub System.out.println(“ejb create”); } public void ejbRemove() throws EJBException, RemoteException { // TODO Auto-generated method stub } public void ejbActivate() throws EJBException, RemoteException { // TODO Auto-generated method stub } public void ejbPassivate() throws EJBException, RemoteException { // TODO Auto-generated method stub } /** * An example business method * * @ejb.interface-method view-type = “remote” * * @throws EJBException Thrown if method fails due to system-level error. */ public String sayIt() throws EJBException { System.out.println(“hello didi”); return “hello didi.”; } } [color=cyan][b]HelloHome[/b][/color] public interface HelloHome extends javax.ejb.EJBHome { public com.rox.HelloWorld create() throws javax.ejb.CreateException,java.rmi.RemoteException; } [color=cyan]HelloWorld[/color] public interface HelloWorld extends EJBObject{ public String sayIt() throws RemoteException; } [color=red][b]2、发布ejb到was中[/b][/color] 注意:在ejb的jndi项,填写e

    02

    eclipse + JBoss 5 +

    有时客户端程序(如JSP、Servlet)会和EJB组件运行在同一个JVM上,如在同一个J2EE服务器(JBoss、Weblogic等)中运行。这时就没必要 再通过远程(remote)接口访问Session Bean了,因为客户端和session bean都在同一个jvm上,只需要通过本地接口(local)访问即可。就象直接访问本地类一样(当然,不能直接访问EJB类,需要使用jndi和local接口来获得本地接口对象。当然,也可以通过remote接口来访问ejb,不过这样会有一些性能损失。就象在同一台机器上还通过socket进行访问一样,很多性能都损耗在网络上了。下面我们来举个简单的例子来看一下如何使用本地接口来访问session bean。     先建立一个session bean本地接口,代码如下:

    03

    EJB学习心得

    一:当EJB发布到JBOSS时,如果我们没有为它指定全局JNDI名称或修改其默认的EJB名称, JBOSS就会按照默认的命名规则为EJB生成全局JNDI名称。默认的命名规则如下: 如果把EJB作为模块打包进后缀*.ear的JAVA EE企业应用文件,默认的全局JNDI名称是 本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local 远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote 如果把EJB应用打包成后缀为*.jar的模块文件,默认的全局JNDI名称是 本地接口:EJB-CLASS-NAME/local 远程接口:EJB-CLASS-NAME/remote 二:通过远程接口调用EJB的过程 首先客户端需要和EJB服务器建立Socket通信,在通信管道上他们需要来回发送IIOP协议消息。 因为数据要在网络进行传输,存放数据的JAVA对象必须要序列化。 三:通过本地接口调用EJB的过程 通过本地接口调用EJB,直接在内存中进行交互,这样可以避免网络开销、协议解析的开销和对象序列化的开销。 但是大家必须要注意,只有客户端与EJB应用在同一个JVM内运行的时候,我们才能调用本地接口 。 四:如何通过使用注解方式注入并使用其他的EJB和服务 注入和使用其他EJB的方式如下: @EJB EJB的接口 EJB的变量 通过注解”@EJB”可以注入并使用其他的EJB,如果有多个EJB的类实现了同一个接口,那么在使用”@EJB”的时候 需要明确指定是注入和使用哪一个EJB的Bean。指定方式如下: @EJB(beanName=”EJB类的名称”) EJB的接口 EJB的变量 注入和使用其他服务的方式如下: @Resource 服务名称 服务变量 注意在指定数据源的使用需要配置mappedName的属性值,例如: @Resource(mappedName=”数据库的JNDI名称”) DataSource dataSource 五:JMS中的消息 消息传递系统的中心是消息,一条消息有三部分组成 头(Header),属性(property),主体(body) 消息有以下几种类型,他们都是派生自Message接口 StreamMessage:一种主体中包含JAVA基原值流的消息,如填充和读取均按顺序进行。 MapMessage:一种主体中包含一组名-值对的消息,没有定义条目顺序 TextMessage:一种主体中包含JAVA字符串的消息(例如:XML消息) ObjectMessage:一种主体中包含序列化的JAVA对象的消息 BytesMessage:一种主体中包含连续字节流的消息 消息的传递模型为以下两种: 点对点(point-to-point:PTP):该消息传递模型规定,一条消息只能传递给一个接收方,可以接受过时的消息。采用javax.jms.Queue表示。 发布/订阅(publish/subscribe):该消息传递模型规定,一条消息可以传递给多个接收方,只能接受实时的消息。采用javax.jms.Topic表示。 六:如何发送消息(以Queue为例,如果是Topic则应把所有的Queue改为Topic) 1.得到一个JNDI的初始化上下文(Context) InitialContext ctx = new InitialContext(); 2.根据上下文查找一个连接工厂QueueConnectionFactory。该连接工厂是用JMS提供的,不需要我们自己创建, 每个工厂都绑定一个全局的JNDI,我们通过全局的JNDI来获取它 QueueConnectionFactory factory = (QueueConnectionFactory)ctx.lookup(“QueueConnectionFactory”); 3.通过连接工厂得到一个连接QueueConnection QueueConnection conn = factory.createQueueConnection(); 4.通过连接来建立一个会话(Session) QueueSession session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE); 建立一个不需要事物的并且能启动确认消息已接受的会话 5.查找目标地址 Destination destination = (Destination)ctx.lookup(配置文件的JNDI名称); 6.根据会话和目标地址来建立消息生产者MessageProducer MessageProducer producer = session.crea

    01

    解决Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问

    在使用Python开发过程中,我们有时可能遇到一个常见的错误信息: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问 这个错误通常出现在尝试使用pip安装或更新Python库时,特别是在Windows操作系统上。它表示当前用户没有足够的权限来安装或更新Python库。在本篇文章中,我们将讨论一些解决这个问题的方法。 ## 方法一:使用管理员权限运行 一个常见的原因是缺乏管理员权限。要解决这个问题,我们可以尝试使用管理员权限运行命令提示符或终端窗口。 在Windows操作系统上,可以按下Windows键,然后输入cmd,右键点击命令提示符,并选择“以管理员身份运行”。在macOS或Linux操作系统上,可以打开终端,并使用sudo命令来运行pip命令。 示例代码: ```markdowntitle: 解决Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问解决Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问

    01

    mybatis核心配置文件解读

    ● configuration:根标签,表示配置信息。 ● environments:环境(多个),以“s”结尾表示复数,也就是说mybatis的环境可以配置多个数据源。   ○ default属性:表示默认使用的是哪个环境,default后面填写的是environment的id。default的值只需要和environment的id值一致即可。         ● environment:具体的环境配置(主要包括:事务管理器的配置 + 数据源的配置)   ○ id:给当前环境一个唯一标识,该标识用在environments的default后面,用来指定默认环境的选择。 ● transactionManager:配置事务管理器   ○ type属性:指定事务管理器具体使用什么方式,可选值包括两个   ■ JDBC:使用JDBC原生的事务管理机制。底层原理:事务开启conn.setAutoCommit(false); ...处理业务...事务提交conn.commit(); ■ MANAGED:交给其它容器来管理事务,比如WebLogic、JBOSS等。如果没有管理事务的容器,则没有事务。没有事务的含义:只要执行一条DML语句,则提交一次。 ● dataSource:指定数据源   ○ type属性:用来指定具体使用的数据库连接池的策略,可选值包括三个 ■ UNPOOLED:采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想。       ● property可以是:         ○ driver 这是 JDBC 驱动的 Java 类全限定名。         ○ url 这是数据库的 JDBC URL 地址。         ○ username 登录数据库的用户名。         ○ password 登录数据库的密码。         ○ defaultTransactionIsolationLevel 默认的连接事务隔离级别。         ○ defaultNetworkTimeout 等待数据库操作完成的默认网络超时时间(单位:毫秒)   ■ POOLED:采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现。     ● property可以是(除了包含UNPOOLED中之外):         ○ poolMaximumActiveConnections 在任意时间可存在的活动(正在使用)连接数量,默认值:10         ○ poolMaximumIdleConnections 任意时间可能存在的空闲连接数。         ○ 其它....     ■ JNDI:采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。如果不是web或者maven的war工程,JNDI是不能使用的。 ● property可以是(最多只包含以下两个属性):         ○ initial_context 这个属性用来在 InitialContext 中寻找上下文(即,initialContext.lookup(initial_context))这是个可选属性,如果忽略,那么将会直接从 InitialContext 中寻找 data_source 属性。         ○ data_source 这是引用数据源实例位置的上下文路径。提供了 initial_context 配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找。 ● mappers:在mappers标签中可以配置多个sql映射文件的路径。         ● mapper:配置某个sql映射文件的路径 ○ resource属性:使用相对于类路径的资源引用方式 ○ url属性:使用完全限定资源定位符(URL)方式

    02

    mybatis核心配置文件解读

    ● configuration:根标签,表示配置信息。 ● environments:环境(多个),以“s”结尾表示复数,也就是说mybatis的环境可以配置多个数据源。 ○ default属性:表示默认使用的是哪个环境,default后面填写的是environment的id。default的值只需要和environment的id值一致即可。 ● environment:具体的环境配置(主要包括:事务管理器的配置 + 数据源的配置) ○ id:给当前环境一个唯一标识,该标识用在environments的default后面,用来指定默认环境的选择。 ● transactionManager:配置事务管理器 ○ type属性:指定事务管理器具体使用什么方式,可选值包括两个 ■ JDBC:使用JDBC原生的事务管理机制。底层原理:事务开启conn.setAutoCommit(false); ...处理业务...事务提交conn.commit(); ■ MANAGED:交给其它容器来管理事务,比如WebLogic、JBOSS等。如果没有管理事务的容器,则没有事务。没有事务的含义:只要执行一条DML语句,则提交一次。 ● dataSource:指定数据源 ○ type属性:用来指定具体使用的数据库连接池的策略,可选值包括三个 ■ UNPOOLED:采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想。 ● property可以是: ○ driver 这是 JDBC 驱动的 Java 类全限定名。 ○ url 这是数据库的 JDBC URL 地址。 ○ username 登录数据库的用户名。 ○ password 登录数据库的密码。 ○ defaultTransactionIsolationLevel 默认的连接事务隔离级别。 ○ defaultNetworkTimeout 等待数据库操作完成的默认网络超时时间(单位:毫秒) ■ POOLED:采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现。 ● property可以是(除了包含UNPOOLED中之外): ○ poolMaximumActiveConnections 在任意时间可存在的活动(正在使用)连接数量,默认值:10 ○ poolMaximumIdleConnections 任意时间可能存在的空闲连接数。 ○ 其它.... ■ JNDI:采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。如果不是web或者maven的war工程,JNDI是不能使用的。 ● property可以是(最多只包含以下两个属性): ○ initial_context 这个属性用来在 InitialContext 中寻找上下文(即,initialContext.lookup(initial_context))这是个可选属性,如果忽略,那么将会直接从 InitialContext 中寻找 data_source 属性。 ○ data_source 这是引用数据源实例位置的上下文路径。提供了 initial_context 配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找。 ● mappers:在mappers标签中可以配置多个sql映射文件的路径。 ● mapper:配置某个sql映射文件的路径 ○ resource属性:使用相对于类路径的资源引用方式 ○ url属性:使用完全限定资源定位符(URL)方式

    03
    领券