在大多数网站上,当用户准备提供用户名和密码来登录系统时,会有一个类似"Stay log“的复选框。如果您选中此框,它将使您在同一web浏览器的所有会话中保持登录状态。如何在Java EE中实现相同的功能?
我使用基于表单的容器管理身份验证和JSF登录页面。
<security-constraint>
<display-name>Student</display-name>
<web-resource-collection>
<web-resource-name>CentralFeed</web-resource-name>
<description/>
<url-pattern>/CentralFeed.jsf</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>STUDENT</role-name>
<role-name>ADMINISTRATOR</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>jdbc-realm-scholar</realm-name>
<form-login-config>
<form-login-page>/index.jsf</form-login-page>
<form-error-page>/LoginError.jsf</form-error-page>
</form-login-config>
</login-config>
<security-role>
<description>Admin who has ultimate power over everything</description>
<role-name>ADMINISTRATOR</role-name>
</security-role>
<security-role>
<description>Participants of the social networking Bridgeye.com</description>
<role-name>STUDENT</role-name>
</security-role>
发布于 2011-02-23 04:30:00
通常是这样做的:
当您登录用户时,您还在客户端上设置了一个cookie (并将Cookie值存储在数据库中),该cookie将在特定时间(通常为1-2周)后过期。
当一个新的请求进入时,您检查某个cookie是否存在,如果存在,请查看数据库,看看它是否与某个帐户匹配。如果匹配,您将“松散”登录该帐户。当我说松散的时候,我的意思是你只让会话读取一些信息,而不是写入信息。您需要请求密码才能允许写入选项。
这就是全部。诀窍是确保“松散”的登录不会对客户端造成很大的伤害。这将在一定程度上保护用户,防止有人抓取他的记住我的cookie并试图以他的身份登录。
发布于 2014-11-29 04:34:23
您不能完全通过HttpServletRequest.login(用户名、密码)登录用户,因为您不应该在数据库中同时保留用户名和明文密码。此外,您不能使用保存在数据库中的密码散列执行此登录。但是,您需要使用cookie/DB令牌来识别用户,但是不使用基于Glassfish服务器API的自定义登录模块(Java类)来登录他/她。
有关更多详细信息,请参阅以下链接:
http://www.lucubratory.eu/custom-jaas-realm-for-glassfish-3/
https://stackoverflow.com/questions/5082846
复制相似问题