JSF中基于表单的身份验证

Mik*_*sen 4 java security authentication jsf jaspic

我想在JSF/Primefaces应用程序中实现一个简单的身份验证.我尝试了很多不同的东西,例如Dialog - Login Demo在对话框上做了一个简单的测试,但是它没有登录用户或者?

我也看了一下Java Security,比如:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Protected Area</web-resource-name>
        <url-pattern>/protected/*</url-pattern>
        <http-method>PUT</http-method>
        <http-method>DELETE</http-method>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>REGISTERED_USER</role-name>
    </auth-constraint>
</security-constraint>
Run Code Online (Sandbox Code Playgroud)

有了这个/受保护的一切都受到保护,但据我所知,我需要在服务器中定义一个领域进行身份验证.我不想在服务器中指定它,只是在数据库中进行简单的查找.

有没有办法在不在应用程序服务器中定义某些内容的情况下验证用户?或者另外一个简单的解决方案来验证和保护不同的页面?

Arj*_*jms 7

有没有办法在不在应用程序服务器中定义某些内容的情况下验证用户?

这是一个漫长且非常棘手的故事.它经常成为批评Java EE的主要观点之一.

故事的核心是传统的Java EE应用程序应该部署"未解析的依赖关系".必须在应用程序服务器上满足这些依赖关系,通常是非开发人员,通常使用某种GUI或控制台.

安全配置是未解决的依赖项之一.

如果安全配置在应用程序服务器上完成,则根据定义,这始终是不可移植的,例如,它必须以特定于应用程序服务器的方式完成.它完全排除了使用应用程序域模型(例如JPA实体User)进行此身份验证.

一些服务器(例如JBoss AS)允许从应用程序内部配置其专有安全机制,并且还允许从应用程序加载"自定义登录模块"(几乎每个服务器的术语都不同).通过一些小的攻击,这将允许使用应用程序域模型和应用程序本身用于身份验证的相同数据源.

最后,还有一种相对未知的便携式方法可以在应用程序中进行身份验证.这是通过做JASPIC SPI,又称JASPIJSR 196.基本上,这个JASPIC似乎是你正在寻找的.

不幸的是,JASPIC并不完美,即使它是Java EE 6的技术,我们几乎都在Java EE 7,目前在各种应用服务器中对JASPIC的支持仍然是粗略的.最重要的是,即使JASPIC是标准化的,应用服务器供应商仍然需要专有配置来实际使其工作.

我写了一篇关于JASPIC的文章,它更详细地解释了当前的问题:使用JASPIC在Java EE中实现容器认证