java - 如何启用以 cookie 为条件的按钮?
问题描述
我正在构建一个可以接受来宾和注册用户的 Web 应用程序。对于注册用户,在他们登录后,我只想为他们显示一个“注销”按钮。如果有一个 cookie 表明用户已登录,我想让它出现。有一个带有登录表单的 JSP,它重定向到 GET POST 方法(servlet)并创建一个发送到浏览器的 cookie。
我的问题:如何将按钮的存在与证明用户状态的 cookie 关联起来?它是在 JSP 端还是在 servlet 端?
使用 cookie 是正确的方法还是使用会话更好?
解决方案
我实际上搜索并找到了一个可能的答案。
我能做的是使用浏览器中的jsp文件中的java代码获取令牌,然后我可以获取已登录人的电子邮件。通过检查电子邮件是否为空,我可以查看是否有用户登录。
我可以在 jsp 文件中使用这个例子:
<%
String email = LoginDao.getToken(request.getCookies());
if (email != null) {
%>
LoginDao.getToken 是一个调用来分离 cookie 中的电子邮件的方法。
public static String getToken(Cookie[] cookies) throws SQLException {
String cookieData = null;
String email = null;
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("token")) {
cookieData = cookie.getValue();
}
}
if (cookieData != null) {
email = getEmailCookie(cookieData);
}
}
return email;
}
在 getEmalCookie 的帮助下:
public static String getEmailCookie(String cookieData) throws SQLException {
String[] splitCookie = cookieData.split("&&&&&");
String passAndCookieSalt = splitCookie[0];
String email = splitCookie[1];
String cookieSalt = splitCookie[2];
String databaseData = Queries.getPassword(email);
if(databaseData != null) {
String[] splitDatabase = databaseData.split("&&&&&");
if (splitDatabase.length >= 2) {
String passwordSalt = splitDatabase[1];
if (Password.hashString(passwordSalt + "&&&&&" + cookieSalt).equals(passAndCookieSalt)) {
return email;
} else {
return null;
}
} else {
return null;
}
} else {
return null;
}
调用 Queries.getPassword(email) 从数据库中获取电子邮件并使用 (Password.hashString(passwordSalt + "&&&&&" + cookieSalt) 对其进行哈希处理,从而将其与浏览器中的 pass 和 cookie salt 进行比较。
推荐阅读
- javaagents - Java 代理 - 保护 -XX:+StartAttachListener
- javascript - 如何从 google-cloud-firestore 获取动态集合名称?
- java - Microprofile @Fallback 在本机图像模式下不起作用
- python-3.x - Python git 包获取标签并提交
- assembly - 如何获得最高有效位的位置
- python - 如何在 Python 的数据框中为布尔函数下标?
- jmeter - 在单个线程中多次运行第一个请求和其他一次请求
- c# - Unity3D - Mesh.colors 非常慢?
- hugo - 部分 Hugo .Data.Pages 仅适用于 root (index.html),但不适用于其他页面
- angular - Angular 命名(二级)路由是如何工作的?