struts2拦截器实现登录拦截

话不多说,直接开始源代码
这是工程目录
在这里插入图片描述
首先创建数据表

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20),
  `password` varchar(20),
  `sex` varchar(1),
  `age` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'admin', '12345', '男', 18);
INSERT INTO `user` VALUES (2, 'zhangsan', 'qwer', '男', 20);
INSERT INTO `user` VALUES (5, 'xiaohong', 'qwer', '女', 18);

创建实体类User.java

package com.wang.entity;

public class User {
	private String username;//用户名
	private String password;//密码
	private int age;//年龄
	private String sex;//性别
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + "]";
	}
	
	
}

创建连接数据库的工具类DBConnection.java

package com.wang.jdbcutils;

import java.sql.*;

public class DBConnection {
	// JDBC 驱动名及数据库 URL
	static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
	static final String DB_URL = "jdbc:mysql://localhost:3306/springtest";

	// 数据库的用户名与密码,需要根据自己的设置
	static final String USER = "root";
	static final String PASS = "root";

	public static Connection getDBConnection() {
		Connection conn = null;
		Statement stmt = null;
		try {
			// 注册 JDBC 驱动
			Class.forName(JDBC_DRIVER);
			// 打开链接
			System.out.println("连接数据库...");
			conn = DriverManager.getConnection(DB_URL, USER, PASS);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}

	// 关闭数据库
	public static void closeDB(Connection con, PreparedStatement pstm, ResultSet rs) {
		if (rs != null)
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		if (pstm != null)
			try {
				pstm.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		if (con != null)
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
	}
}

对数据库操作的dao层接口UserDao.java

package com.wang.dao;

import com.wang.entity.User;

public interface UserDao {
	public User login(User user);
}

实现类UserDaoImpl.java

package com.wang.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.wang.entity.User;
import com.wang.jdbcutils.DBConnection;

public class UserDaoImpl implements UserDao {
	Connection con = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;

	@Override
	public User login(User user) {
		User us = new User();
		con = DBConnection.getDBConnection();
		String sql = "select * from user where username=? and password = ?";
		try {
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, user.getUsername());
			pstmt.setString(2, user.getPassword());
			rs = pstmt.executeQuery();
			//将从数据库中查找数据,若没找到us则为null
			while (rs.next()) {
				us.setUsername(rs.getString("username"));
				us.setPassword(rs.getString("password"));
				us.setAge(rs.getInt("age"));
				us.setSex(rs.getString("sex"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return us;
	}

}

Action类LoginAction.java

package com.wang.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.wang.dao.UserDao;
import com.wang.dao.UserDaoImpl;
import com.wang.entity.User;

public class LoginAction extends ActionSupport implements ModelDriven<User> {
	User user = new User();
	UserDao useDao = new UserDaoImpl();

	public String login() {
		ActionContext ac = ActionContext.getContext();
		User us = useDao.login(user);
		String str;
		if (us.getUsername() != null) {
			ac.getSession().put("user", us);
			str = "success";
		} else {
			ActionContext.getContext().put("msg", "用户名或密码错误");
			str = "input";
		}
		System.out.println(str);
		return str;
	}
	//注销用户
	public String clearSession() {
		ActionContext ac = ActionContext.getContext();
		Map<String, Object> session = ac.getSession();
		session.clear();
		return INPUT;
	}
	//从首页跳转到index.jsp,会被拦截器拦截,若session没有user数据则跳转到登录界面
	public String index() {
		return SUCCESS;
	}

	@Override
	public User getModel() {
		return user;
	}
}

拦截器LoginInterceptor.java

package com.wang.Interceptor;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class LoginInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		ActionContext ac = arg0.getInvocationContext();
		// 获取session中的user类,若没有则user==null
		Object user = ac.getSession().get("user");
		if (user != null) {
			return arg0.invoke();
		} else {
			ac.put("msg", "请登录!");
			return Action.INPUT;
		}

	}

}

struts.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

	<package extends="struts-default" name="default">
		<!-- 实现登录操作 -->
		<action name="login_*" class="com.wang.action.LoginAction"
			method="{1}">
			<result>/index.jsp</result>
			<result name="input">/login.jsp</result>
			<result name="clearSession">/login.jsp</result><!-- 注销用户的操作 -->
		</action>
	</package>
	<package name="default2" extends="struts-default">
		<!-- 自定义拦截器 -->
		<interceptors>
			<interceptor name="login" class="com.wang.Interceptor.LoginInterceptor">
			</interceptor>
			<interceptor-stack name="myStack">
				<interceptor-ref name="login" />
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<!-- 使用拦截器 -->
		<default-interceptor-ref name="myStack"></default-interceptor-ref>
		<action name="index" class="com.wang.action.LoginAction">
			<result name="input">/login.jsp</result>
			<result>/index.jsp</result>
		</action>
	</package>
</struts>    

接下来是jsp页面
首页,也就是运行该工程的第一个页面,通过这个页面来使拦截器拦截

<body>
	欢迎来到我的页面,
	<a href="index">点击进入首页</a>
</body>

登录页面,这里用一个简单的表格来写出登录表单

<body>
	<div align="center">
	<h3 style="font-family: 华文行楷">登录</h3>
			<form action="login_login" method="post">
			<table>
			<tr><td colspan="2" align="center">${msg}</td></tr>
				<tr>
					<td>用户名:</td>
					<td><input name="username" type="text" /></td>
				</tr>
				<tr>
					<td>密码:</td>
					<td><input name="password" type="text" /></td>
				</tr>
				<tr>
					<td colspan="2" align="center"><input value="登录" type="submit" />
					<input value="重置" type="reset" /></td>
				</tr>
			</table>
		</form>
	</div>
</body>

登录成功的页面,会显示用户的数据

<body>
	<div align="center">
		<table>
			<tr>
				<td colspan="2" align="center">登录成功</td>
			</tr>
			<tr>
				<td colspan="2">用户信息:</td>
			</tr>
			<tr>
				<td>用户名:</td>
				<td>${user.username }</td>
			</tr>
			<tr>
				<td>密&nbsp;&nbsp;码:</td>
				<td>${user.password}</td>
			</tr>
			<tr>
				<td>年&nbsp;&nbsp;龄:</td>
				<td>${user.age}</td>
			</tr>
			<tr>
				<td>性&nbsp;&nbsp;别:</td>
				<td>${user.sex}</td>
			</tr>
			<tr>
				<td colspan="2" align="center"><a href="login_clearSession"><input
						type="button" value="注销" /></a></td>
			</tr>
		</table>
	</div>
</body>

接下来是演示的图片
在这里插入图片描述
点击“进入首页”。若,没有登录过则进入登录界面
在这里插入图片描述
在这里插入图片描述
源代码已上传,可以下载https://github.com/1419908068/struts

猜你喜欢

转载自blog.csdn.net/baozi141990/article/details/85276079