实现登陆程序需要用到cookie、session和java过滤器,下面是实现登陆程序的完整攻略:
1.理解cookie和session
- Cookie是一小段文本信息,存在客户端浏览器上,用于存储一些关于用户的信息。一个浏览器对于同一个cookie的请求都会带上这个cookie。
- Session是一种在服务器端保存用户数据的解决方案。Session的工作流程为当服务器启动时,它会为每个用户创建一个会话对象(Session Object),当用户第一次访问Web应用的时候,服务器自动为该用户创建唯一一个SessionID并将其存入Session的对象维护列表中,然后在此用户的整个会话周期中,将SessionID作为该用户的标识传递给它所发出的所有请求,并将其存储在服务器内存中。
2.了解java过滤器
- 过滤器是一种特殊的Java类,用于检查和修改HTTP请求和响应的内容。它可以拦截HTTP请求,对请求进行预处理,也可以拦截HTTP响应,对响应进行后处理。过滤器可以在servlet之前或之后执行,它可以完成一些通用的任务,如:日志记录、字符编码转换、权限检查、数据过滤等。
3.实现过程
- 第一步:在登陆页面输入用户名和密码后,将它们传到服务器端。服务器端接受用户名和密码,验证用户信息是否正确,如果正确,则在服务器端创建session对象,并将用户名存入session对象中。session对象的ID被保存在一个cookie中,并在响应头中返回给客户端浏览器,这个cookie就是通过response.addCookie方法添加的。代码如下:
String username = request.getParameter("username");
String password = request.getParameter("password");
if(username.equals("admin") && password.equals("123456")){
HttpSession session = request.getSession();
session.setAttribute("username", username);
Cookie cookie = new Cookie("JSESSIONID", session.getId());
response.addCookie(cookie);
response.sendRedirect("main.jsp");
}else{
response.sendRedirect("index.jsp");
}
- 第二步:对于已经登陆的用户,在其后续的请求中,服务器端通过session ID判断是否为同一用户。如果用户的cookie中携带了正确的session ID,则可以从session对象中获取该用户的信息,否则跳转到登录页面。代码如下:
Cookie[] cookies = request.getCookies();
if(cookies != null){
HttpSession session = request.getSession(false);
if(session != null && session.getAttribute("username") != null){
filterChain.doFilter(request, response);
}else{
response.sendRedirect("index.jsp");
}
}else{
response.sendRedirect("index.jsp");
}
- 第三步:在web.xml中配置过滤器,指定拦截哪些URL。当某个URL被访问时,过滤器会拦截请求并对其进行处理,如果检查通过,则继续执行后续的Servlet;否则直接返回错误信息页面。代码如下:
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.example.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/main/*</url-pattern>
</filter-mapping>
4.示例说明
下面是两个示例说明:
- 示例1:
用户通过浏览器访问一个需要验证的网站,被拦截器拦截。拦截器检查浏览器的Cookie中是否包含已经建立的SessionID。如果有,则取出Session中的用户信息进行验证;否则,跳转回登陆界面进行登陆,登陆成功后,服务器生成一个SessionID并把SessionID写入一个Cookie,将连接重定向到需要访问的页面。
- 示例2:
某个网站需要考虑到隐私问题,通过拦截器实现对用户登陆情况的检查。如果用户已经登陆,可以直接访问目标页面;如果没有登陆,则拦截所有访问请求,将用户重新导向一个登陆页面,要求它输入合法的登陆信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:cookie、session和java过滤器结合实现登陆程序 - Python技术站