Database 如何处理数据库中用户的身份验证/授权?
目前,我正在使用JSF2.0、Tomcat7和MongoDB进行一个web项目。我有一个大问题,就是如何处理数据库中用户的会话管理和身份验证/授权 我想要的结构如下:只有登录的用户才能创建事件,每个人都可以看到创建的事件Database 如何处理数据库中用户的身份验证/授权?,database,jsf,jakarta-ee,authentication,authorization,Database,Jsf,Jakarta Ee,Authentication,Authorization,目前,我正在使用JSF2.0、Tomcat7和MongoDB进行一个web项目。我有一个大问题,就是如何处理数据库中用户的会话管理和身份验证/授权 我想要的结构如下:只有登录的用户才能创建事件,每个人都可以看到创建的事件 create.xhtml-->仅适用于登录用户 events.xhtml-->对所有人公开 我计划的基本结构是: 检查页面是否需要登录用户(例如,create.xhtml) 如果是,请检查用户是否已登录 如果用户未登录,请转到login.xhtml 如果成功登录,请返回请
-->仅适用于登录用户create.xhtml
-->对所有人公开events.xhtml
- 检查页面是否需要登录用户(例如,
)create.xhtml
- 如果是,请检查用户是否已登录
- 如果用户未登录,请转到
login.xhtml
- 如果成功登录,请返回请求页面
- 保留“用户已登录”信息,除非用户单击“注销”
按钮(我猜
在这里发挥作用)@SessionScoped
@SessionScoped
注释?在Create.java中
或
LoginManager.java
有几种选择。选择哪一个完全取决于你。客观地权衡具体的利弊,以符合你自己的情况
1.使用提供的JavaEE 只需在
web.xml
中声明一个
,它引用在servletcontainer中配置的安全域。您可以为您的Web应用指定URL模式,该模式应检查登录和/或角色,例如/secured/*
,/app/*
,/private/*
等
不幸的是,在JavaEE8之前,您仍然需要以特定于servletcontainer的方式配置安全领域。它通常在特定于servletconainer的文档中描述。在Tomcat8的例子中,这是最重要的。例如,“JDBCRealm”一节描述了基于用户/角色表的基于数据库的领域
自JavaEE8以来,最终将有一个基于的标准API
优势:
- 相对快速且易于安装和使用
- 自从JavaEE8之后,终于有了一个健壮灵活的标准API
- 在JavaEE8之前,领域配置是特定于容器的。在JavaEE8中,新版本应该在的帮助下解决这个问题
- 在JavaEE8之前,没有细粒度的控件
- 在JavaEE8之前,它是非常斯巴达的;没有“记住我”,错误处理能力差,没有基于权限的限制
- -包含完整的代码示例
- -示例web应用程序(由我开发),它还演示了Java EE 8身份验证(JSR-375 RI)
2.家庭种植 这允许更细粒度的控制,但是您需要自己编写所有代码,并且您应该真正了解/理解应该如何实现这样的过滤器以避免潜在的安全漏洞。例如,在JSF端,您可以通过
sessionMap.put(“user”,user)
将登录用户作为会话属性,如果session.getAttribute(“user”)
不是null
,则检查过滤器
优势:
- 细粒度控制
- 完全独立于容器
- 车轮的改造;新特性需要大量代码
- 作为初学者,您永远无法确定代码是否100%健壮
- -包含用于身份验证的介绍性说明和启动示例
- -包含更多扩展的身份验证启动示例,其中还包括ajax请求
- -包含授权的启动示例
3.调整第三方框架 例如,等等。这通常提供比标准容器管理的身份验证更细粒度的配置选项,并且您不需要自己为此编写任何代码,当然除了登录页面和一些(XML)配置 优势:
- 细粒度控制
- 完全独立于容器
- 没有重新发明车轮;最低限度的自己的代码
- 经过大量用户的全面开发和测试,因此很可能100%健壮
- 一些学习曲线
- -关于在JSF2 webapp中集成Shiro的详细教程