系统开发中使用拦截器校验是否登录并使用MD5对用户登录密码进行加密
项目名称:客户管理系统
项目描述:
项目基于javaEE平台,B/S模式开发。使用Struts2、Hibernate/Spring进行项目框架搭建。使用Struts中的Action 控制器进行用户访问控制。持久层使用Hibernate框架完成ORM处理。使用Spring AOP切面技术进行业务层事务控制。使用Spring IOC容器实现持久层管理。使用Spring IOC容器管理所有的Action,控制Action的生命周期以各种服务的注入关系。前台页面使用JSP前台页面技术和jQuery EasyUI 开发。用户登录加入MD5加密,权限验证功能。系统中查询功能使用了多条件分页查询。
下面主要对登录拦截器校验和用户登录密码MD5加密进行展示。
编写一个工具类作为自定义的权限拦截器,用于校验是否登录:
public class PrivilegeInterceptor extends MethodFilterInterceptor {
@Override
//不校验登陆和注册方法
protected String doIntercept(ActionInvocation invocation) throws Exception {
//1 获得Session
Map<String, Object> session = ActionContext.getContext().getSession();
//2 获得登陆标识
User user = (User) session.get("user");
//3 判断标识是否存在
if(user != null){
//存在=> 放行
return invocation.invoke();
}else{
//不存在=> 重定向到登陆页面
return "toLogin";
}
}
}
在struts配置文件中配置拦截器:
<interceptors>
<!-- 注册拦截器 -->
<interceptor name="privilegeInterceptor" class="com.kevin.web.interceptor.PrivilegeInterceptor"/> <!-- 配置拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="privilegeInterceptor">
<param name="excludeMethods">login,regist</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<!-- 指定默认拦截器栈 -->
<default-interceptor-ref name="myStack"/>
MD5加密工具类
public class MD5Utils {
/**
* 使用md5的算法进行加密
*/
public static String md5(String plainText) {
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5").digest(
plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有md5这个算法!");
}
String md5code = new BigInteger(1, secretBytes).toString(16);// 16进制数字
// 如果生成数字未满32位,需要前面补0
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
}
在UserService的实现类中写判断登录:
public User getUserByCodePassword(User u) {
//1 根据登陆名称查询登陆用户
User existU = ud.getByUserCode(u.getUser_code());
//2 判断用户是否存在.不存在=>抛出异常,提示用户名不存在
if(existU==null){
throw new RuntimeException("用户名不存在!");
}
//3 判断用户密码是否正确=>不正确=>抛出异常,提示密码错误
if(!existU.getUser_password().equals(MD5Utils.md5(u.getUser_password()))){
throw new RuntimeException("密码错误!");
}
//4 返回查询到的用户对象
return existU;
}
在UserService的实现类中写注册用户方法:
public void saveUser(User u) {
//1 调用Dao根据注册的登陆名获得用户对象
User existU = ud.getByUserCode(u.getUser_code());
if(existU!=null){
//2 如果获得到user对象,用户名已经存在,抛出异常
throw new RuntimeException("用户名已经存在!");
}
//使用MD5对密码进行加密
u.setUser_password(MD5Utils.md5(u.getUser_password()));
//3 调用Dao执行保存
ud.save(u);
}
public void setUd(UserDao ud) {
this.ud = ud;
}
系统开发中使用拦截器校验是否登录并使用MD5对用户登录密码进行加密的更多相关文章
- (转)spring中的拦截器(HandlerInterceptor+MethodInterceptor)
1. 过滤器跟拦截器的区别 在说拦截器之前,不得不说一下过滤器,有时候往往被这两个词搞的头大. 其实我们最先接触的就是过滤器,还记得web.xml中配置的<filter>吗~ 你应该知道 ...
- Spring MVC中的拦截器Interceptor
谈谈spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可以帮我们验证是否登陆.预先设置数据以及统计方法的执行效率等等.今天就来详细的谈一下spring中的拦截器.spring中拦截器主 ...
- struts2中的拦截器
一 AOP思想: 面向切面编程的思想 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP ...
- 开发openfire 消息拦截器插件PacketInterceptor
开发消息拦截器的步骤跟开发简单插件步骤一样,要开发消息拦截器插件,首先继承PacketInterceptor包拦截类,然后在initializelPlugin()方法中注册拦截器,就可以实现inter ...
- 【SpringMVC学习11】SpringMVC中的拦截器
Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理.本文主要总结一下springmvc中拦截器是如何定义的,以及测试拦截器的执行情况和使用 ...
- (转)SpringMVC学习(十二)——SpringMVC中的拦截器
http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...
- .NET中的拦截器filter的使用
拦截器的使用 使用场景分析 我们先想像一个场景,就是程序员开发软件,他是怎么工作的呢?我们都知道,普通的程序员只需要根据需求文档开发相应的功能即可,他不用和客户谈论软件需求,不用理会软件卖多少钱,他要 ...
- SpringMVC中的拦截器、过滤器的区别、处理异常
1. SpringMVC中的拦截器(Interceptor) 1.1. 作用 拦截器是运行在DispatcherServlet之后,在每个Controller之前的,且运行结果可以选择放行或拦截! 除 ...
- grpc中的拦截器
0.1.索引 https://waterflow.link/articles/1665853719750 当我们编写 HTTP 应用程序时,您可以使用 HTTP 中间件包装特定于路由的应用程序处理程序 ...
随机推荐
- Linux 下的两个特殊的文件 -- /dev/null 和 /dev/zero 简介及对比
1.概论 -- 来自维基的解释 /dev/null : 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一 ...
- JSON对象与字符串间的转化
常用json间字符串与json对象的转化1.JSON对象转化问字符串 var obj = {name : "Geoff Lui",age : 26}; console.log(ob ...
- toLatin1 qt
Latin1是ISO-8859-1的别名,有些环境下写作Latin-1.ISO-8859-1ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F ...
- 网防G01管理检测系统Linux版安装
监测包内容: gov_defence_agent_x64_linux_v3.1.18.tar.gz LinuxVersion(datalog.sh getlog.sh setup.sh) 1. ...
- Golang实现requests库
Golang实现requests库 简单的封装下,方便使用,像python的requests库一样. Github地址 Github 支持 GET.POST.PUT.DELETE applicatio ...
- ASP.NET Core Web App应用第三方Bootstrap模板
引言 作为后端开发来说,前端表示玩不转,我们一般会选择套用一些开源的Bootstrap 模板主题来进行前端设计.那如何套用呢?今天就简单创建一个ASP.NET Core Web MVC 模板项目为例, ...
- NET Core微服务之路:基于Ocelot的API网关Relay实现--RPC篇
前言 我们都知道,API网关是工作在应用层上网关程序,为何要这样设计呢,而不是将网关程序直接工作在传输层.或者网络层等等更底层的环境呢?让我们先来简单的了解一下TCP/IP的五层模型. (图片 ...
- 一个开源的,跨平台的.NET机器学习框架ML.NET
微软在Build 2018大会上推出的一款面向.NET开发人员的开源,跨平台机器学习框架ML.NET. ML.NET将允许.NET开发人员开发他们自己的模型,并将自定义ML集成到他们的应用程序中,而无 ...
- Lesson 28 No parking
Text Jasper White is one of those rare people who believes in ancient myths. He has just bought a ne ...
- 【RL-TCPnet网络教程】第25章 DHCP动态主机配置协议基础知识
第25章 DHCP动态主机配置协议基础知识 本章节为大家讲解DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),通过前面章节对TCP和UDP ...