使用Java EE中的filter进行授权
我有用户和密码的mongodb基础。 我有一个带有授权表单的jsp文件。 filter应该是检查 – 授权用户与否。 如果未经授权,Servlet应授权用户。
请举例说明如何操作。
- 如何validation授权用户?
- 用户未登录。 假设用户在数据库中。 如何
授权?
抱歉英语不好。
这是一个场景: –
- 用户进入安全页面。
- filter拦截用户请求。
- filter从会话中检索
User
对象。 - 如果存在
User
对象,则允许用户访问受保护的页面。 - 如果
User
对象不存在,请将用户重定向到登录页面。
当用户从登录页面提交凭证时: –
- 系统使用针对数据库提供的凭据对用户进行身份validation。
- 如果身份validation成功,系统会在会话中存储
User
对象并显示欢迎页面。 - 如果身份validation不成功,系统会将用户带回登录页面。
Java EE实现通常允许您设置login modules
。 这些包含用于对许多不同系统进行身份validation的实际代码。 这些包括本地XML文件,数据库,LDAP,Kerberos以及其他许多文件。
您不必自己编写,已经为您提供了它们。
您的代码仅触发身份validation(或声明要保护的资源以及Java EE为您触发身份validation),并且对实际身份validation机制一无所知。 实际身份validation通常在代码之外配置。 某些Java EE实现允许您在EAR中指定它(例如,通过Jboss AS上的-service.xml文件)。
一个潜在的缺点是这些模块特定于您的Java EE实现(例如JBoss AS,Glassfish等)。 如果在代码之外进行配置,则有人必须为要运行代码的每个不同Java EE应用程序服务器重新执行此操作。
接下来,Java自动为您启动身份validation的方式(声明性安全性)相当粗糙。 更常见的是,它的触发是以编程方式完成的,因此您可以更好地控制登录框的工作方式以及何时完成。
请参阅以下内容,了解如何执行此操作: http : //it-result.me/servlet-3-programmatic-authentication-api/
或者,确实也有limc解释的方式。 通过这种方法,您完全忽略了Java EE为此提供的API,并且只需构建您自己的代码,这些代码通常会查询数据库并将某些对象存储到HTTP会话中。 这里的缺点是您的安全上下文不会自动传播,您必须手动传递此对象或提供需要通过访问HTTP会话来检查身份validation的代码。
特别是对于访问HTTP会话的业务bean来说是一种不好的做法。
最后,Seam 3承诺构建一个便携式CDI扩展以解决安全问题,如果/何时可用,这可能是一个很大的帮助。