使用Java EE中的filter进行授权

我有用户和密码的mongodb基础。 我有一个带有授权表单的jsp文件。 filter应该是检查 – 授权用户与否。 如果未经授权,Servlet应授权用户。

请举例说明如何操作。

  • 如何validation授权用户?
  • 用户未登录。 假设用户在数据库中。 如何
    授权?

抱歉英语不好。

这是一个场景: –

  1. 用户进入安全页面。
  2. filter拦截用户请求。
  3. filter从会话中检索User对象。
  4. 如果存在User对象,则允许用户访问受保护的页面。
  5. 如果User对象不存在,请将用户重定向到登录页面。

当用户从登录页面提交凭证时: –

  1. 系统使用针对数据库提供的凭据对用户进行身份validation。
  2. 如果身份validation成功,系统会在会话中存储User对象并显示欢迎页面。
  3. 如果身份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扩展以解决安全问题,如果/何时可用,这可能是一个很大的帮助。