SSM项目使用拦截器实现登录验证功能

登录接口实现

 public User queryUser(String UserName, String Password,HttpServletRequest request, HttpServletResponse response) {
User user = userMapper.queryUser(UserName,Password);
if(!StringUtils.isEmpty(user)){
//1.获取session
HttpSession session = request.getSession();
//2.获取sessionid
String sessionId = session.getId();
//3.将sessionid作为key,用户信息user作为value,放入session中
session.setAttribute(sessionId,user);
//4.将sessionId存到cookie中,"JSESSIONID"为自定义的key值
Cookie cookie = new Cookie("JSESSIONID",sessionId);
//5.设置cookie的有效路径
cookie.setPath(request.getContextPath());
//6.将cookie返回给页面
response.addCookie(cookie);
}
return user;
}

代码思路:

1.用户输入账号密码登录成功后获取用户信息(User)

2.获取session,得到sessionid(注:每一个session对象都有一个sessionid)

3.将sessionid作为key,用户信息(User)作为value,放入session中

4.创建一个Cookie对象,将"JSESSIONID"作为key,sessionId作为value,放入cookie中

5.设置cookie的有效路径,将cookie返回给页面,此时页面就可以收到key为"JSESSIONID",value为sessionId的cookie信息,如下图。

拦截器类代码实现

public class Filter extends HandlerInterceptorAdapter {
private static Logger logger = Logger.getLogger(Filter.class);
/**
* 进入拦截器后首先进入的方法
* 返回false则不再继续执行
* 返回true则继续执行
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)throws Exception
{
//1.定义sessionid变量
String sessionid = "";
//2.获取session对象
HttpSession session=request.getSession();
//3.获取页面上所有的cookie
Cookie[] cookies = request.getCookies();
//4.循环寻找名称为"JSESSIONID"的cookie
for(Cookie cookie:cookies){
if(cookie.getName().equals("JSESSIONID")){
sessionid = cookie.getValue();
}
}
//5.根据sessionid获取用户信息
User user = (User) session.getAttribute(sessionid);
if(StringUtils.isEmpty(user)) {
logger.info("用户未登录");
//用户未登录跳转到登录页面
response.sendRedirect("login");
return false;
}
logger.info("用户已登录");
return true;
} }

代码思路:

1.自定义一个拦截器类,首先要继承HandlerInterceptorAdapter,并重写preHandle方法,在此方法中编写拦截器的逻辑代码

2.获取session,得到sessionid(注:每一个session对象都有一个sessionid)

3.将sessionid作为key,用户信息(User)作为value,放入session中

4.创建一个Cookie对象,将"JSESSIONID"作为key,sessionId作为value,放入cookie中

5.设置cookie的有效路径,将cookie返回给页面,此时页面就可以收到key为"JSESSIONID",value为sessionId的cookie信息,如下图。

配置文件实现

    <!--自定义拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--配置要拦截的路径-->
<mvc:mapping path="/**"/>
<!--配置登录接口不被拦截-->
<mvc:exclude-mapping path="/user/login"/>
<!--指定拦截器类路径-->
<bean class="com.lishiqi.Util.Filter"></bean>
</mvc:interceptor>
</mvc:interceptors>

配置含义:

1.我们使用拦截器肯定要规定拦截哪些接口,首先我们将所有的接口都拦截

2.然后我们发现问题,此时登录接口也在拦截范围中,所以我们正常调用登录接口之前他也会拦截判断一下用户是否登录过,这个时候用户肯定没有登录过,那么就会又跳转到登录界面,我们再次登录还是跳转到登录页面,一直登录不上,所以我们需要把登录接口配置为不拦截

3.然后我们指定我们配置好的拦截器类路径,这个时候可以在该类中进行登录验证操作了

4.此配置文件为spring-mvc.xml配置文件

最新文章

  1. 七牛--关于图片上传方向不统一的问题--主要关于图片EXIF信息中旋转参数Orientation的理解
  2. c# ref关键字对于引用类型传递的影响
  3. U-boot的环境变量: bootcmd 和bootargs
  4. sql openrowset
  5. cocos2dx_moveby_n_moveto
  6. SPFA_YZOI 1662: Easy sssp
  7. java 判断是不是检查性异常
  8. HDU 5781 ATM Mechine
  9. 关于left join 和 inner join
  10. 超越Web,Javascript在物联网的应用
  11. 添加 hexo yilia 主题的文章阅读量
  12. 【Java框架型项目从入门到装逼】第十四节 查询用户列表展现到页面
  13. django学习:整体思路与方向
  14. Tomcat8源码笔记(五)组件Container分析
  15. Java匹马行天下之JavaSE核心技术——Java基础语法
  16. 解析Linux下\r\n的问题(回车和换行)
  17. cp显示进度条
  18. JAVA 课堂测试
  19. WinForm窗体上两个panel,怎么实现一个panel固定漂浮在另一个panel之上
  20. Unity3d学习笔记记录

热门文章

  1. AcWing3544. 寻找变化前的01序列
  2. Linux(centos)创建用户并分配权限
  3. htmlunit设置只采集html,取消对css,javascript支持
  4. 刷完 900 多题后的首次总结:LeetCode 应该怎么刷?
  5. 【LeetCode】1170. Compare Strings by Frequency of the Smallest Character 解题报告(C++)
  6. 【LeetCode】377. Combination Sum IV 解题报告(Python & C++)
  7. 【LeetCode】394. Decode String 解题报告(Python)
  8. D. Persistent Bookcase(Codeforces Round #368 (Div. 2))
  9. Xcode Error returned in reply: Connection invalid
  10. Spring @Component 注解的使用