有几种选择 . 选择哪一项完全取决于您 . 只是客观地权衡具体的优缺点,以符合自己的情况 .
1.使用Java EE提供的容器管理身份验证
只需在 web.xml 中声明 ,它引用在servletcontainer中配置的安全域 . 您可以为您的webapp指定应检查登录和/或角色的URL模式,例如: /secured/* , /app/* , /private/* 等
在Java EE 8之前,您遗憾的是仍然需要以特定于servlet容器的方式配置安全性 . 它's usually described in servletconainer-specific documentation. In case of Tomcat 8, that'是Realm HOW-TO . 例如,"JDBCRealm"部分描述了基于用户/角色表的基于数据库的域 .
从Java EE 8开始,最终会有一个基于JSR-375的标准API .
优点:
相对快速且易于设置和使用 .
自Java EE 8以来,终于有了一个强大而灵活的标准API .
缺点:
在Java EE 8之前,域配置是特定于容器的 . 在Java EE 8中,新的JSR-375 Security Spec应该在JASPIC的帮助下解决这个问题 .
在Java EE 8之前,没有细粒度的控件 .
在Java EE 8之前,它非常简洁;没有"remember me",错误处理不好,没有基于权限的限制 .
另见:
2. Homegrow一个servlet过滤器
这样可以实现更精细的控制,但是您需要自己编写所有代码,并且您应该真正了解/了解应该如何实现这样的过滤器以避免潜在的安全漏洞 . 在JSF方面,您可以通过 sessionMap.put("user", user) 将登录用户作为会话属性,并在 session.getAttribute("user") 不是 null 时检入过滤器 .
优点:
细粒度控制 .
完全独立于容器 .
缺点:
重新发明轮子;新功能需要大量代码 .
作为初学者,您永远不确定您的代码是否100%健壮 .
另见:
3.改编第三方框架
例如,Apache Shiro,Spring Security等 . 这通常提供比标准容器管理身份验证更精细的配置选项,并且您不需要自己编写任何代码,期望登录页面和一些(XML)配置当然 .
优点:
细粒度控制 .
完全独立于容器 .
没有重新发明轮子;至少自己的代码 .
由很多用户彻底开发和测试,因此很可能100%强大 .
缺点:
一些学习曲线 .
另见:
JSF2 - Shiro tutorial - 关于将Shiro集成到JSF2 webapp中的广泛教程