话不多说,直接开始源代码
这是工程目录

首先创建数据表

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;}@Overridepublic String toString() {return "User [username=" + username + ", password=" + password + "]";}}

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

package com.wang.jdbcutils;import java.sql.*;public class DBConnection {// JDBC 驱动名及数据库 URLstatic 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;@Overridepublic 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则为nullwhile (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;}@Overridepublic 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 {@Overridepublic String intercept(ActionInvocation arg0) throws Exception {ActionContext ac = arg0.getInvocationContext();// 获取session中的user类,若没有则user==nullObject 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"><inputtype="button" value="注销" /></a></td></tr></table></div>
</body>

接下来是演示的图片

点击“进入首页”。若,没有登录过则进入登录界面


源代码已上传,可以下载https://github.com/1419908068/java。下载压缩包后里面的Struts2Test文件夹就是该工程

struts2拦截器实现登录拦截相关推荐

  1. java登陆拦截器_SpringBoot拦截器实现登录拦截

    SpringBoot拦截器可以做什么 可以对URL路径进行拦截,可以用于权限验证.解决乱码.操作日志记录.性能监控.异常处理等. SpringBoot拦截器实现登录拦截 pom.xml:<?xm ...

  2. java 登录拦截器_springMVC 拦截器-用户登录拦截实战

    各位小伙伴 咱们继续学习新知识 今天要分享的就是 拦截器 不知道小伙伴们平时上网的时候有没有注意到,尤其是上网购物的时候,不登录账号,就无法访问一些功能页面,比如你不登录账号,就没法查看购物车里面有什 ...

  3. Spring拦截器实现登录拦截

    hello,大家好,好久没发文章了,之前一段时间因为没遇到太好的内容.昨天研究了下登录时Spring拦截器实现功能,今天和大家分享下,有问题的话欢迎大家指出与批评,好,下面进入正题.    说起拦截器 ...

  4. Spring拦截器进行登录拦截

    拦截器: public class LoginInterceptor implements HandlerInterceptor{private static final Log log = LogF ...

  5. uniapp 拦截器-未登录跳转到登陆页面

    uniapp实现未登陆拦截 效果: 拦截器前 加了拦截器后 建一个interceptor.js //页面白名单const whiteList = ['/user-pages/bindPhone',]f ...

  6. Java web登录拦截器_Spring MVC 拦截器实现登录

    上篇博文我在博客中讲到如何使用spring MVC框架来实现文件的上传和下载,今天小钱给大家再来分享和介绍Spring MVC框架中相当重要的一块功能--拦截器. 关于拦截器的概念我在这里就不多说了, ...

  7. Struts2拦截器实例-权限拦截器

    查看本例之前首先要大概了解struts2的理论知识(点击查看) 本例实现了一个权限拦截器! 需求:要求用户登录,且必须为指定用户名才可以查看系统中的某个视图资源,如果不满足这两个条件,系统直接转入登录 ...

  8. 从struts2拦截器到自定义拦截器

    http://www.cnblogs.com/withyou/p/3170440.html 拦截器可谓struts2的核心了,最基本的bean的注入就是通过默认的拦截器实现的,一般在struts2.x ...

  9. Struts2内置拦截器和自定义拦截器

    内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截器,拦截器才可以正常 ...

  10. 使用struts2中默认的拦截器以及自定义拦截器

    转自:http://blog.sina.com.cn/s/blog_82f01d350101echs.html 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Acti ...

最新文章

  1. 手机浏览器页面知识收集
  2. python三种导入模块的方法和区别
  3. 看DLI服务4核心如何提升云服务自动化运维
  4. Number()函数转换‘单个数值的数组‘为何是数字?【JavaScript】
  5. n对括号问题,(求n对括号的正确排列有多少)
  6. 苹果手机投屏软件_苹果手机怎么投屏到电脑上?支你一招
  7. 程序员怎样学习python_一个开发十年的程序员论:学习Python最正确的步骤(0基础必备)...
  8. 拓端tecdat|R语言自定义两种统计量度:平均值和中位数,何时去使用?
  9. 计算机常用英语词汇及读音,程序员相关常见英文单词的正确读法
  10. 统计出各分数段的人数
  11. 读书百客:《相思》鉴赏
  12. Scratch少儿趣味编程pdf
  13. 个人的第一个Chrome插件ColorConversion
  14. 三维投影总结:数学原理、投影几何、OpenGL教程、我的方法
  15. 中国企业信息化30年发展简史
  16. Winform使用DSO Framer控件嵌入office 异常总结及解决方法
  17. 卡尔曼滤波与组合导航原理_图解卡尔曼滤波器,无需深厚的数学知识也易懂(第五部分:多维卡尔曼滤波器)...
  18. div+css静态网页设计——迪斯尼公主滚动特效(7页) HTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作
  19. python 编程4,和7 幸运数字
  20. HLSL CG 与glsl着色器编译及其原理

热门文章

  1. 超像素块提取 matlab,GitHub - CielChen/Make3DFeature: 将图像分割成超像素,并提取每个超像素块的Make3D特征...
  2. 系统发育树操作神器-TreeTools-持续更新
  3. 最全的前端程序员常用英语词汇都在这了~
  4. Vue使用Iconfont图标库
  5. abb机器人写字程序实例_【干货】ABB机器人编程实例一
  6. 合成分红游戏源码_趣合成app开发(现成源码演示案例)
  7. 项目管理需要具备什么能力?
  8. 【深度学习--图像分类】imageAI自定义模型训练
  9. 微软模拟飞行10厦门航空涂装_《微软模拟飞行》——准备起飞!
  10. js判断数组是否相等的方法