使用Java EE中的过滤器进行授权

时间:2011-02-13 15:29:08

标签: java authentication

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

请举例说明如何操作。

  • 如何验证授权用户或 不?
  • 未记录用户。假设一个 用户在数据库中。怎么样 授权?
抱歉英语不好。

2 个答案:

答案 0 :(得分:1)

这是一个场景: -

  1. 用户进入安全页面。
  2. 过滤器拦截用户请求。
  3. 过滤器从会话中检索User个对象。
  4. 如果存在User对象,请允许用户访问受保护的页面。
  5. 如果User对象不存在,请将用户重定向到登录页面。
  6. 当用户从登录页面提交凭证时: -

    1. 系统使用提供的凭据对数据库对用户进行身份验证。
    2. 如果身份验证成功,系统会在会话中存储User对象并显示欢迎页面。
    3. 如果身份验证不成功,系统会将用户带回登录页面。

答案 1 :(得分:0)

Java EE实现通常允许您设置login modules。这些包含用于对许多不同系统进行身份验证的实际代码。这些包括本地XML文件,数据库,LDAP,Kerberos以及其他许多文件。

您不必自己编写,已经为您提供了这些内容。

您的代码仅触发身份验证(或声明要保护的资源以及Java EE为您触发身份验证),并且对实际身份验证机制一无所知。实际身份验证通常在代码之外配置。一些Java EE实现允许您在EAR中指定它(例如,通过Jboss AS上的-service.xml文件)。

潜在的缺点是这些模块特定于您的Java EE实现(例如JBoss AS,Glassfish等)。如果在代码之外进行配置,则有人必须为要运行代码的每个不同Java EE应用程序服务器重新执行此操作。

接下来,Java自动为您启动身份验证的方式(声明性安全性)相当粗糙。更多情况下,触发它是以编程方式完成的,因此您可以更好地控制登录框的工作方式以及何时完成。

请参阅以下内容,了解如何执行此操作:http://it-result.me/servlet-3-programmatic-authentication-api/

或者,确实还有limc解释的方式。通过这种方法,您完全忽略了Java EE为此提供的API,并且只需构建自己的代码,这些代码通常会查询数据库并将某些对象存储到HTTP会话中。这里的缺点是您的安全上下文不会自动传播,您必须手动传递此对象或提供需要通过访问HTTP会话来检查身份验证的代码。

特别是对于访问HTTP会话的业务bean来说,这是一种不好的做法。

最后,Seam 3承诺为安全问题构建便携式CDI扩展,如果/何时可用,这可能是一个很大的帮助。