系统开发中使用拦截器校验是否登录并使用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 中间件包装特定于路由的应用程序处理程序 ...
随机推荐
- pta-树种统计
树种统计 (25 分) 随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类.请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比. 输入格式: 输入首先给出正整数N(≤105 ...
- TimesTen数据库的备份和恢复
建立不支持增量备份的全备份 做一个全备份,fileFull为不支持增量的全备份 $ ttbackup -type fileFull -dir /tmp/backupdir sampledb_1122( ...
- git mvn 使用
git 更换远程仓库地址: stps:先删除远程仓库地址,然后再添加 [git remote rm origin] 删除现有远程仓库 [git remote add origin url]添加新远程仓 ...
- 对象池----unity中应用
对象池应用在unity中能减少资源消耗,节省内存空间具体原理不再赘述. 以下是他的操作步骤:(注意:对象池中应用到了栈或对队列!) 1).先建立一个(怪物)物体 mMonster; 2).再建立一 ...
- 【盛派周三分享-2019.2.20】开放分享内容,本期主题:《SCF、DDD及相关架构思想讨论》
“周三分享”是盛派网络约定的每周三晚上定时举办的内部分享活动,活动主要由技术人员分享各方面的技术主题,并由所有参与者围绕主题进行讨论.除技术话题外,也可能涉及到相关的设计.财税.金融.政策等方面的延伸 ...
- java 23种设计模式 深入理解【转】
以下是学习过程中查询的资料,别人总结的资料,比较容易理解(站在各位巨人的肩膀上,望博主勿究) 创建型抽象工厂模式 http://www.cnblogs.com/java-my-life/archive ...
- laytpl模板——怎么使用ajax与数据交互
第一次在项目中用laytpl模板,下面是一些使用过程中的探索,希望对小伙伴们有所帮助. 注:第一次使用这个模板的小伙伴建议先去看看官网 laytpl <script type="tex ...
- [Swift]LeetCode3. 无重复字符的最长子串 | Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...
- [Swift]LeetCode515. 在每个树行中找最大值 | Find Largest Value in Each Tree Row
You need to find the largest value in each row of a binary tree. Example: Input: 1 / \ 3 2 / \ \ 5 3 ...
- [Swift]LeetCode836. 矩形重叠 | Rectangle Overlap
A rectangle is represented as a list [x1, y1, x2, y2], where (x1, y1) are the coordinates of its bot ...