记录学习历程
一. 前期环境搭建
idea2023.2.3 ; tomcat 9.0.13 ;jdk版本8;
jar包如下:
Mybatis框架:mysql-connecto ; mybatis; mybatis-spring;durid
Spring框架:spring-jdbc ;spring-aspect
SpringMVC:servlet-api;spring-webmvc
辅助jar包:fast-json (mvc中返回Object时转换内容为json字符串格式的工具,配合ajax使用)
相关的配置文件:
mybatis配置文件;spring配置文件;web核心配置文件 ;pom文件依赖和resources标签修改;
架构如下:
mybatis核心配置文件:
(由于使用了druid数据库连接池,因此不需要再mybatis中书写环境变量)
、
Spring核心配置文件:
web核心配置文件:
pom文件:
(1)jar包:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.15</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.29</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.3.29</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.29</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.0</version> </dependency>
(2)resources标签:
<resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource>
OK,前期基本环境完事。
二. 开始项目小服务
这里记录下简易版的两种:
十天免登陆服务(cookie实现);令牌机制(会话,过滤器实现)
/** * 该方法用于处理用户登陆的请求,并在此基础上实现了简易的登陆服务 * 十天免登录服务:用户通过储存在本计算机的cookie能够实现十天免登陆服务 * 令牌机制:通过会话实现,避免恶意登录 * @param request * @param response * @return */ @RequestMapping("/check.do") public String check(HttpServletRequest request, HttpServletResponse response){ int result = 0; //免登陆服务:十天免登录 String empNo = request.getParameter("empNo"); String eName = request.getParameter("eName"); String ck = request.getParameter("ck"); Map map = new HashMap(); //1.免登录的cookie Cookie cookieArray[] = request.getCookies(); if(cookieArray!=null){ for (Cookie cookie:cookieArray ) { //假设给客户派发十天免登录的cookie(“”exam) String key = cookie.getName(); if("exam".equals(key)){ //令牌机制 HttpSession session = request.getSession(true); //token //解释:true代表如果请求没有会话则创建一个新的会话 // false代表如果没有会话则返回一个null return "index"; } } } //2.第二种,能够正确输入账号密码;在此情况下需要给用户设置一个十天免登陆的cookie map.put("empNo",empNo); map.put("eName",eName); result = loginService.login(map); if(result>0){ if(ck!=null){ Cookie c = new Cookie("exam",eName); //第一个参数是cookie名,第二个参数是cookie的value c.setMaxAge(60*60*24*10); response.addCookie(c); } HttpSession session = request.getSession(true); return "index"; } return "error";
令牌的过滤器:
package com.bjpowernode.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.io.IOException; @WebFilter("/*") public class SafeFilter implements Filter{ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; String uri = request.getRequestURI(); if(uri.contains("/login")){ filterChain.doFilter(servletRequest,servletResponse); return; } HttpSession session = request.getSession(false); //true为创建新的会话;false为不创建会话并返回null值 if(session!=null){ filterChain.doFilter(servletRequest,servletResponse); }else{ request.getRequestDispatcher("/view/error.html").forward(request,servletResponse); } } }