目前,我正在使用JSF 2.0,Tomcat 7和MongoDB开发一个Web项目。我有一个很重要的问题,即如何处理数据库中用户的会话管理和身份验证/授权。
我想要的结构如下:只有登录的用户才能创建事件,每个人都可以看到创建的事件。
create.xhtml
- >仅适用于已登录的用户。events.xhtml
- >为所有人公开。我计划的基本结构是:
create.xhtml
)login.xhtml
@SessionScoped
开始发挥作用)问题是:
@SessionScoped
注释?在Create.java
或
LoginManager.java
?答案 0 :(得分:57)
有几种选择。选择哪一项完全取决于您。客观地权衡具体的优缺点,以符合自己的情况。
只需在<security-constraint>
中声明一个web.xml
,它引用一个在servletcontainer中配置的安全领域。您可以为您的webapp指定应检查登录和/或角色的URL模式,例如: /secured/*
,/app/*
,/private/*
等
在Java EE 8之前,您遗憾的是仍然需要以特定于servlet容器的方式配置安全性。它通常在servletconainer特定的文档中描述。在Tomcat 8的情况下,那是Realm HOW-TO。例如,基于用户/角色表的基于数据库的域在“JDBCRealm”部分中描述。
从Java EE 8开始,最终会有一个基于JSR-375的标准API。
这允许更细粒度的控制,但是您需要自己编写所有代码,并且您应该真正了解/了解如何实现这样的过滤器以避免潜在的安全漏洞。在JSF方面,您可以通过sessionMap.put("user", user)
将登录用户作为会话属性,并在session.getAttribute("user")
不是null
的情况下检查过滤器。
例如,Apache Shiro,Spring Security等。这通常提供比标准容器管理身份验证更精细的配置选项,您不需要自己编写任何代码,期望登录页面和一些(XML)配置当然。