首先看看不加拦截器时候的效果,如下,可以访问到action=dianming
然后定义一个过滤器,拦截action != login的action,如下
HttpServletRequest httpRequest = (HttpServletRequest)request;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String action = httpRequest.getParameter("action");
if(!("login".equals(action))) {
String isLogin = (String)httpRequest.getSession().getAttribute("isLogin");
if(isLogin == null || isLogin.isEmpty()) {
httpRequest.getRequestDispatcher("/index.jsp").forward(request, response);
}
}
// pass the request along the filter chain
chain.doFilter(request, response);
再看看效果
接着进行登录,发现可以登录成功
然后因为我设置了session的有效期为一分钟,代码如下
//判断用户是否登陆成功
private boolean loginSuccess(HttpServletRequest request,
HttpServletResponse response) {
// TODO Auto-generated method stub
if(username != null && password != null) {
// System.out.println(username + "::::" + password);
for(User user : userList) {
if(username.equals(user.getUsername()) && password.equals(user.getPassword())) {
request.getSession().setAttribute("isLogin", username);
HttpSession session = request.getSession();
session.setMaxInactiveInterval(60);
return true;
}
}
}
return false;
}
一分钟后刷新页面,发现,返回到登录页面了
下面是对注册登录后,往数据库增加用户和查询用户的操作
//查询用户
public ArrayList<User> getUserList() {
if(conn == null) {
conn = MysqlPool.getConn();
}
try {
pstmt = conn.prepareStatement("select * from user");
rs = pstmt.executeQuery();
while(rs.next()) {
user = new User();
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
userList.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(rs != null) {
rs.close();
rs = null;
}
if(pstmt != null) {
pstmt.close();
pstmt = null;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return userList;
}
//添加用户
public void addUser(String name, String password) {
if(conn == null) {
conn = MysqlPool.getConn();
}
try {
pstmt = conn.prepareStatement("insert into user(username, password) values(?,?)");
pstmt.setString(1, name);
pstmt.setString(2, password);
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(rs != null) {
rs.close();
rs = null;
}
if(pstmt != null) {
pstmt.close();
pstmt = null;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在servlet类中判断是注册还是登录操作
if(action != null) {
if("login".equals(action)) {
if(loginSuccess(request,response)) {
request.getRequestDispatcher("/main.jsp").forward(request, response);
} else {
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
} else if("register".equals(action)) {
if(registerSuccess(request,response)) {
request.getRequestDispatcher("/success.jsp").forward(request, response);
} else {
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
} else if("dianming".equals(action)) {
if(dianmingSuccess(request,response)) {
request.getRequestDispatcher("/main.jsp").forward(request, response);
} else {
request.getRequestDispatcher("/main.jsp").forward(request, response);
}
} else {
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
} else {
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
调用注册登录方法
//判断是否注册成功
private boolean registerSuccess(HttpServletRequest request,
HttpServletResponse response) {
// TODO Auto-generated method stub
if(username != null && password != null && !("".equals(username)) && !("".equals(password))) {
// System.out.println("username:"+user.getUsername());
for(User user : userList) {
if(username.equals(user.getUsername())) {
return false;
}
}
return true;
}
return false;
}
//判断用户是否登陆成功
private boolean loginSuccess(HttpServletRequest request,
HttpServletResponse response) {
// TODO Auto-generated method stub
if(username != null && password != null) {
// System.out.println(username + "::::" + password);
for(User user : userList) {
if(username.equals(user.getUsername()) && password.equals(user.getPassword())) {
request.getSession().setAttribute("isLogin", username);
HttpSession session = request.getSession();
session.setMaxInactiveInterval(60);
return true;
}
}
}
return false;
}