JSF、EJB和基于表单的JDBC领域登录的概念

JSF、EJB和基于表单的JDBC领域登录的概念,jsf,netbeans,ejb,Jsf,Netbeans,Ejb,我试图学习JavaEE(EJB、JSF…)的概念,因此我正在开发一个示例应用程序。 不幸的是,我很难理解一些概念应该如何协同工作,以及我是否以正确的专业方式工作。在这一点上,我真的对所有这些不同的方法感到困惑,希望有人能帮助我 我的应用程序的核心功能包括一个文档服务器,注册用户可以在其中上载文档并用有用的信息进行描述 文档应该简单地保存在服务器上,所有信息都应该存储在MySQL数据库中。 我用Netbeans创建了三个项目 企业应用程序项目(DocApp) EJB模块(DocApp EJB)

我试图学习JavaEE(EJB、JSF…)的概念,因此我正在开发一个示例应用程序。 不幸的是,我很难理解一些概念应该如何协同工作,以及我是否以正确的专业方式工作。在这一点上,我真的对所有这些不同的方法感到困惑,希望有人能帮助我

我的应用程序的核心功能包括一个文档服务器,注册用户可以在其中上载文档并用有用的信息进行描述

文档应该简单地保存在服务器上,所有信息都应该存储在MySQL数据库中。 我用Netbeans创建了三个项目

  • 企业应用程序项目(DocApp)
  • EJB模块(DocApp EJB)
  • 和一个Web应用程序项目(DocApp war)
主要的事情都很好

  • 用JPA访问数据库
  • 使用primefaces文件上载器上载文件
  • 用EJB注入JSF
  • 甚至是用户授权JDBC领域,如本教程所示
我现在的问题是,特定子目录中的所有页面应该只能由注册用户访问

我看到的唯一方法是使用一个会话范围ManagedBean,而不是使用多个请求范围ManagedBeans。 这似乎是一个不好的做法,但我不知道如何处理这个问题,否则。 按照我的理解,每个JSF页面都应该有一个ManagedBean(xhtml)


有没有一个好方法来处理这个问题,或者我做错了什么?

访问整个子目录的默认机制是在web.xml中为表示该目录的URL模式添加一个安全约束

每个注册用户都应该获得一个表示正在注册的角色,例如“已注册”

然后将此角色添加到web.xml中的安全约束中


JSF和Servlet容器管理的安全性之间的交互有点笨拙,但确实有效

访问整个子目录的默认机制是在web.xml中为表示该目录的URL模式添加安全约束

每个注册用户都应该获得一个表示正在注册的角色,例如“已注册”

然后将此角色添加到web.xml中的安全约束中


JSF和Servlet容器管理的安全性之间的交互有点笨拙,但确实有效

谢谢你的回答。我知道这就是它的工作原理。但是如果我这样做,那么每次重定向到该目录中的另一个页面时,登录信息都会消失,除非我创建一个会话范围的ManagedBean,我想这是一个糟糕的做法。我明白了。你的书中的“登录信息”到底是什么?这是您自己在eg会话范围内的对象,还是HttpServletRequest#isUserInRole是否返回true?我不熟悉函数HttpServletRequest#isUserInRole。“登录信息”指的是用户名/密码。我使用的是基于表单的登录和安全约束。如果会话结束,我将被重定向到登录页面。我很难判断您是否真的进行了容器登录。如果您未使用isUserInRole或@RoleAllowed,则可能无法使用。HttpServletRequest#getUserPrincipal在您认为已登录时返回什么?嗨,Mike,会话属性中的超时配置有问题。我将值从10更改为1000。但就在这里,我有一个理解的问题。会话到底是什么,从哪里开始和结束?授权会话是否独立于ManagedBean范围变量?它是否关心它是会话范围还是请求范围?对于getUserPrincipal.getName(),我得到了与当前用户名getRemoteUser()相同的结果。谢谢您的回答。我知道这就是它的工作原理。但是如果我这样做,那么每次重定向到该目录中的另一个页面时,登录信息都会消失,除非我创建一个会话范围的ManagedBean,我想这是一个糟糕的做法。我明白了。你的书中的“登录信息”到底是什么?这是您自己在eg会话范围内的对象,还是HttpServletRequest#isUserInRole是否返回true?我不熟悉函数HttpServletRequest#isUserInRole。“登录信息”指的是用户名/密码。我使用的是基于表单的登录和安全约束。如果会话结束,我将被重定向到登录页面。我很难判断您是否真的进行了容器登录。如果您未使用isUserInRole或@RoleAllowed,则可能无法使用。HttpServletRequest#getUserPrincipal在您认为已登录时返回什么?嗨,Mike,会话属性中的超时配置有问题。我将值从10更改为1000。但就在这里,我有一个理解的问题。会话到底是什么,从哪里开始和结束?授权会话是否独立于ManagedBean范围变量?它是否关心它是会话范围还是请求范围?使用getUserPrincipal.getName()可以获得与当前用户名getRemoteUser()相同的结果。