当前位置:网站首页>JSP learning (IX. filter, wildcard and cookie processing)
JSP learning (IX. filter, wildcard and cookie processing)
2022-04-22 18:48:00 【Thirty miles away】
Tips : Finally, there is a real column including all class contents
Filter filter
Filters can also be called preprocessors , He's executing a page (servlet Or web page ) A program executed before , Often used to verify cookie Or filter through ( A way to crack web pages )
Fitter You can specify which page or pages to execute :
For example, if I want to execute on all pages, I use /*(* For wildcard )
If you just want to servlet-mapping by /abc Page execution of , Only need to filter-mapping Change it to /abc that will do
If you just want to abc.jsp Page execution of , Only need to filter-mapping Change it to /abc.jsp that will do

Write fiter Interface is required when implements Filter
Also on doFilter Rewrite
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException
wildcard
It can be seen above that the settings are mapping You can use wildcards when you use , This involves matching priorities
It is divided into three parts :
First, match the exact match
Match again /* wildcard
Then match the suffix wildcard
for instance :
I have a 5 individual servlet Of mapping Respectively /abc.k 、/abc、/* 、/abc/* 、/*.k
I'm now typing in the browser : project /abc
First match /abc, Yes , Show the second
I'm now typing in the browser : project /ab
First match /ab, No,
Next match /*, There are two :/*、/abc/* , Will choose the long one , So the fourth
without /*, Will match /*.k
Cookie Brief introduction
1. The server script sends a series of cookie Go to browser . Such as name , Age ,ID Number and so on .
2. The browser stores this information on the local machine , For a rainy day .
3. The next time the browser sends any request to the server , It will put these cookie The message is sent to the server , Then the server uses that information to identify users or do something else .
In fact, there is nothing like what has been learned :session, I thought a session Just a user , This is not entirely accurate , For example, I log in to a website , I quit my current login account again , Log in to another account , One session It corresponds to two users , And if only session If you exit the account, when we realize automatic login , Only by setting session The survival time to complete .cookie Simplify these operations :
Set up cookie Methods :
Cookie cookie = new Cookie("user", user+"-"+password);
cookie.setPath(req.getContextPath());/ The valid range is my web page
cookie.setMaxAge(60*60*1);/ Valid for one hour
resp.addCookie(cookie);
Set up cookie It will be sent as follows :
Copy the picture of the rookie , The parameter does not correspond to

Actual items
utilize Filter filter 、 Wildcards and Cookie Handle , Automatic login
Of the login page servlet:
package com.ljq;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.activation.DataSource;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.mysql.cj.exceptions.DataReadException;
import com.sun.org.apache.bcel.internal.generic.Select;
import com.sun.xml.internal.bind.CycleRecoverable.Context;
import sun.awt.windows.WPrinterJob;
public class loginservlet extends HttpServlet {
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
HttpSession session = req.getSession();
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter pWriter = resp.getWriter();
String user = req.getParameter("user");
String password = req.getParameter("password");
String string = null;
if (user == null || password == null || user.length() == 0 || password.length() == 0) {
session.setAttribute("failmess", ", Input empty ");
string = "loginfail.jsp";
}
String dataBase = "updatabase";
String mysqluser = "root";
String mysqlpassword = "123";
String table = "up";
String ruser[][] = null;
if (string == null)
try {
Connection connection = DriverManager.getConnection("jdbc:mysql://192.168.101.121:3306/"+dataBase+"?"+"userSSL=false&serverTimezone=CST&characterEncoding=utf-8",mysqluser,mysqlpassword);
Statement sql = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = (ResultSet)sql.executeQuery("Select * from "+table);
rs.last();
int n = rs.getRow();
rs.beforeFirst();
ruser = new String[n][2];
int i = 0;
while(rs.next()) {
ruser[i][0] = rs.getString(1);
ruser[i][1] = rs.getString(2);
i++;
}
sql.close();
if (ruser == null || ruser.length == 0)
{
session.setAttribute("failmess", ", Database has no data or read error ");
string = "loginfail.jsp";
}
if ((i = login(ruser, user, password)) != -1) {
Userbean Userbean = new Userbean();
Userbean.setUser(user);
Userbean.setPassword(password);
Userbean.setImage(user+".png");
session.setAttribute("Userbean", Userbean);
string = "loginsuccess.jsp";
String autoLogin = req.getParameter("autologin");
if (autoLogin.equals("1 Hours of automatic login ")) {
Cookie cookie = new Cookie("user", user+"-"+password);
cookie.setPath(req.getContextPath());
cookie.setMaxAge(60*60*1);
resp.addCookie(cookie);
}
else{
Cookie cookie = new Cookie("user", user+"-"+password);
cookie.setPath(req.getContextPath());
cookie.setMaxAge(60*5);
resp.addCookie(cookie);
}
}
else {
session.setAttribute("failmess", ", Wrong password ");
string = "loginfail.jsp";
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
session.setAttribute("failmess", ", Database connection failed ");
string = "loginfail.jsp";
}
resp.sendRedirect(string);
// try {
// Context context = (Context) new InitialContext();
// Context contextNeeded = (Context)((InitialContext) context).lookup("java:comp/env");
// DataSource ds = (DataSource)((InitialContext) contextNeeded).lookup("up");
// System.out.println(ds);
// } catch (NamingException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
public int login(String mysqlup[][], String user, String password) {
for (int i = 0; i < mysqlup.length; i++) {
if (mysqlup[i][0].equals(user) && mysqlup[i][1].equals(password))
{
return i;
}
}
return -1;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}
}
It has been set according to the user's requirements cookie
Fiter Agency buying in :
package com.ljq;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.xml.ws.Dispatch;
import com.sun.xml.internal.ws.client.dispatch.DataSourceDispatch;
public class AutoLoginFilter implements Filter{
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
req.setCharacterEncoding("utf-8");
HttpServletRequest request2 = (HttpServletRequest)req;
HttpSession session = request2.getSession();
Cookie[] cookies = request2.getCookies();
String userp = null;
for (int i = 0; cookies != null && i < cookies.length; i++) {
if ("user".equals(cookies[i].getName())) {
userp = cookies[i].getValue();
break;
}
}
Userbean Userbean = (Userbean)session.getAttribute("Userbean");
if (userp != null && Userbean != null) {
String[] userpp = userp.split("-");
String user = userpp[0];
String password = userpp[1];
if (!user.equals(Userbean.getUser()) || !password.equals(Userbean.getPassword()))
{
Userbean.setUser(null);
Userbean.setPassword(null);
}
}
else if (Userbean!=null){
Userbean.setUser(null);
Userbean.setPassword(null);
Userbean.setImage(null);
}
chain.doFilter(request2, resp);
}
public int login(String mysqlup[][], String user, String password) {
for (int i = 0; i < mysqlup.length; i++) {
if (mysqlup[i][0].equals(user) && mysqlup[i][1].equals(password))
{
return i;
}
}
return -1;
}
}
Exited servlet:
Because... Cannot be deleted cookie, We can directly set his validity period to 0, Let him expire
package com.ljq;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Logout extends HttpServlet{
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// remove session
req.getSession().removeAttribute("Userbean");
// establish cookie
Cookie cookie = new Cookie("user", "msg");
cookie.setPath(req.getContextPath());
// take cookie Set as expired
cookie.setMaxAge(0);
resp.addCookie(cookie);
// Navigation , Redirect
resp.sendRedirect(req.getContextPath()+"/index.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Exhibition :

版权声明
本文为[Thirty miles away]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204221846350012.html
边栏推荐
- [untitled] 2022 coal mine outburst prevention test exercise and simulation test
- 高并发之——深度解析ScheduledThreadPoolExecutor类的源代码
- 聊聊缓存布尔值踩到的坑
- 对.NET未来的一点感悟
- 山东大学项目实训树莓派提升计划二期(九)继承和多态
- TypeScript中的命名空间使用
- Transformation operator
- 062 反序列化漏洞
- C# 从list 或者string中随机获取一个
- DL之YoloV3:YoloV3论文《YOLOv3: An Incremental Improvement》的翻译与解读
猜你喜欢
随机推荐
Namespace usage in typescript
The Sandbox 与 Apex Athletes 达成合作关系
描述文件中的全局类型
MFC principle and method (II)
不产桩不建桩,充电服务商NaaS靠什么崛起?
山东大学项目实训树莓派提升计划二期(九)继承和多态
力扣-64.最小路径和
jsp学习(九.Filter过滤器、通配符和Cookie处理)
CData Drivers for Jira完整的特征和属性
STC目前所有系列的中断列表
【手部姿态估计】【论文详读】3D Hand Pose Estimation with a Single Infrared Camera via Domain Transfer Learning
使用RectclerView的一些问题记录
高并发之——深度解析ScheduledThreadPoolExecutor类的源代码
视频知识点(16)- 如何将y4m文件转换成yuv文件?
100 days of code-day26
208. 实现 Trie (前缀树)
.net core 中集成Identity框架
062 反序列化漏洞
Compare the difference between the two lists. Each element of the list is a string
大话测试数据(二):概念测试数据的获取









