这个是登录的页面jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>User Login Page</title>
</head>
<body>
<% String lastUser = null;
Cookie[] cs = request.getCookies();
if(cs != null){
for(Cookie c : cs){
if(c.getName().equals("username")){
lastUser = c.getValue();
break;
}
}
}
%>
<h1>User Login Page</h1>
<hr>
<form action="login" method="POST">
<label>
name:
<input type="text" name="name" value="<%= lastUser %>"><br>
</label>
<label>
password:
<input type="password" name="password"><br>
</label>
<label>
remember me:
<input type="checkbox" name="reme"><br>
</label>
<input type="submit" value="Log Me In">
</form>
<%
String result = request.getParameter("result");
if(result != null && result.equals("fail"))
{
out.println("<p style='color:red'>用户名或密码错误!</p >");
}
%>
</body>
</html>
这个是servlet用来暂时用cookie存储用户名和密码
package cookie;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/reme")
public class reme extends HttpServlet {
private static final long serialVersionUID = 1L;
public reme() {
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String reme = request.getParameter("reme");
if (reme != null) {
Cookie c = new Cookie("username", name);
c.setMaxAge(24*60*60*1000);
response.addCookie(c);
} else {
Cookie[] cs = request.getCookies();
if (cs != null) {
for (Cookie c : cs) {
if (c.getName().equals("username")) {
c.setMaxAge(0);
response.addCookie(c);
break;
}
}
}
}
PrintWriter out = response.getWriter();
out.println("<html><body>login with cookie</body></html> ");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author : Jenson.Liu
* @date : 2020/2/3 7:47 下午
*/
@Configuration
public class CorsConfig implements WebMvcConfigurer {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.setAllowCredentials(true); //允许接受cookie
corsConfiguration.setMaxAge(1000L);
corsConfiguration.addAllowedOrigin("*"); // 1允许任何域名使用
corsConfiguration.addAllowedHeader("*"); // 2允许任何头
corsConfiguration.addAllowedMethod("*"); // 3允许任何方法(post、get等)
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig()); // 4
return new CorsFilter(source);
}
}
对于设置cookie的接口
@ResponseBody
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(HttpServletResponse response,HttpServletRequest request, @RequestBody HashMap<String,String> map) {
logger.info("username:"+map.get("username"));
String token = TokenTool.createToken("username");
Cookie cookie=new Cookie("token",token);
cookie.setDomain(request.getServerName());
cookie.setPath(request.getContextPath());
cookie.setMaxAge(60*60*24);
cookie.setHttpOnly(false);
response.addCookie(cookie);
return TokenTool.createToken("username");
}
这里tooken就可以设置到前端域里面。
根据参考资料中的内容推断,可能是跨域问题导致了无法使用cookie保存用户信息。因此,需要处理跨域问题,具体可以按照参考资料中提供的方案进行配置处理。
配置跨域问题需要在后端进行,可以按照参考资料中提供的代码进行配置。需要注意的是,该代码中设置了允许任何来源的请求(addAllwdOrigin("*")),需要根据实际情况进行调整。
除了使用cookie,还有其他替代方案来保存用户信息,比如: 1. 使用session:服务器使用session来保存用户信息,客户端每次请求时携带session ID,服务器根据session ID获取对应的session中的用户信息。 2. 使用JWT:服务器生成一个JSON Web Token(JWT),包含用户信息,并将其返回给客户端,客户端每次请求需要携带JWT,服务器验证JWT并获取其中的用户信息。
需要根据实际情况进行选择和实现,具体可以参考相关文档和代码示例。
是否正确配置了@WebServlet注解,要确保URL模式"/reme"与您的应用程序的web.xml文件中的URL模式一致。
另外你的浏览器是否是隐身模式,或者禁用cookie
浏览器f12看下,服务器发了 setcookie 指令了没有