wuheng 2 gadi atpakaļ
vecāks
revīzija
f75c4b59bd

+ 1 - 1
day15/src/main/java/com/lovecoding/download/DownloadAction.java

@@ -16,7 +16,6 @@ import java.net.URLEncoder;
 public class DownloadAction extends HttpServlet {
 
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
-
         /**
          * 正常的情况下 ,  下载是不走Java逻辑代码的
          * 我们下载文件都交给 Tomcat, 文件是静态资源, Http 服务器 (Tomcat, Nginx ) 都能处理
@@ -65,6 +64,7 @@ public class DownloadAction extends HttpServlet {
         resp.addHeader("content-type", "application/octet-stream");
         //声明文件名
         String downloadFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
+        //header 使用 filename*=UTF-8'' 协议告诉浏览器后台文件编码是 UTF-8 可以解决中文文件名乱码问题
         resp.addHeader("content-disposition", "attachment; filename*=UTF-8''" + downloadFileName);
         //将文件的文件流和resp相应流合并输出
         IOUtils.copy( fileInputStream, outputStream );

BIN
day15/文件上传下载.pdf


BIN
day15/表格导入数据.pdf


BIN
day15/验证码注册验证.pdf


+ 35 - 27
study/src/com/lovecoding/xml/study/filter/SessionFilter.java

@@ -1,9 +1,12 @@
 package com.lovecoding.xml.study.filter;
 
+import com.lovecoding.xml.study.domian.User;
+
 import javax.servlet.*;
 import javax.servlet.annotation.WebFilter;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
 import java.io.IOException;
 
 @WebFilter("/*")
@@ -14,37 +17,42 @@ public class SessionFilter implements Filter {
         HttpServletRequest req = (HttpServletRequest) servletRequest;
         HttpServletResponse resp = (HttpServletResponse) servletResponse;
         req.setCharacterEncoding("utf-8");
-        resp.setContentType("text/html; charset=utf-8");
-
-        filterChain.doFilter(servletRequest, servletResponse);
-        return ;
+        //resp.setContentType("text/html; charset=utf-8");
         /**
          * 我们在这里增加判断 有些页面是不需要鉴权的
          * 比如说 登陆 注册 都不需要鉴权
          */
-//        String requestURI = req.getRequestURI();
-//
-//        String[] urls = {"/login.jsp", "/user", "/register.jsp", "/css/login.css", "/css/register.css"};
-//        for ( String url : urls ) {
-//            if (requestURI.contains(url)) {
-//                filterChain.doFilter(servletRequest, servletResponse);
-//                return;
-//            }
-//        }
-//
-//        /**
-//         * 我们在这里取出 用户的 Session对象
-//         */
-//        HttpSession session = req.getSession(true);
-//        User user = (User) session.getAttribute("user");
-//        if ( user == null ) {
-//            //用户未登录
-//            session.setAttribute("error", "请登陆后操作!!!!!!!");
-//            resp.sendRedirect(req.getContextPath() + "/login.jsp");
-//        } else {
-//            //能查到 Session 里的 User对象 是 已经登陆的了
-//            filterChain.doFilter(servletRequest, servletResponse);
-//        }
+        String requestURI = req.getRequestURI();
+
+        String[] urls = {
+                "/imgs/reg_bg_min.jpg",
+                "/test/methods",
+                "/login.jsp",
+                "/imgs/Desert1.jpg",
+                "/user",
+                "/register.jsp",
+                "/css/login.css",
+                "/css/register.css"};
+        for ( String url : urls ) {
+            if (requestURI.contains(url)) {
+                filterChain.doFilter(servletRequest, servletResponse);
+                return;
+            }
+        }
+
+        /**
+         * 我们在这里取出 用户的 Session对象
+         */
+        HttpSession session = req.getSession(true);
+        User user = (User) session.getAttribute("user");
+        if ( user == null ) {
+            //用户未登录
+            session.setAttribute("error", "请登陆后操作!!!!!!!");
+            resp.sendRedirect(req.getContextPath() + "/login.jsp");
+        } else {
+            //能查到 Session 里的 User对象 是 已经登陆的了
+            filterChain.doFilter(servletRequest, servletResponse);
+        }
     }
 
 

+ 6 - 2
study/src/com/lovecoding/xml/study/servlet/TestServlet.java

@@ -1,6 +1,7 @@
 package com.lovecoding.xml.study.servlet;
 
 import com.lovecoding.xml.study.utils.BasicServlet;
+import com.lovecoding.xml.study.utils.Captcha;
 
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServletRequest;
@@ -12,8 +13,11 @@ public class TestServlet extends BasicServlet {
 
     public String methods(HttpServletRequest req, HttpServletResponse resp) {
 
-        System.out.println( "OK" );
-        return "调用成功";
+
+        new Captcha().getRandcode( req, resp);
+
+        return "";
+
     }
 
     public String method1(HttpServletRequest req, HttpServletResponse resp) {

+ 10 - 0
study/src/com/lovecoding/xml/study/servlet/UserServlet.java

@@ -15,6 +15,7 @@ public class UserServlet extends HttpServlet{
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String username = req.getParameter("username");
         String password = req.getParameter("password");
+
         String remember = req.getParameter("remember");
         if ( username != null && password != null ) {
             User user = new UserServiceImpl().login(username, password, remember, req, resp);
@@ -37,6 +38,15 @@ public class UserServlet extends HttpServlet{
         req.setCharacterEncoding("UTF-8");
         String username = req.getParameter("username");
         String password = req.getParameter("password");
+        String checkCode = req.getParameter("checkCode");
+        Object code =   req.getSession(true).getAttribute("result");
+
+        if ( checkCode == null || !checkCode.equals( code.toString() ) ) {
+            req.getSession(true).setAttribute("passworderror", "验证码不正确");
+            resp.sendRedirect(req.getContextPath()+ "/register.jsp");
+            return ;
+        }
+
         if ( username != null && !username.equals("")
                 && password != null && !password.equals("") ) {
             User user = new User();

+ 2 - 2
study/src/com/lovecoding/xml/study/utils/BasicServlet.java

@@ -18,8 +18,8 @@ public class BasicServlet implements Servlet {
         try {
             Method method = this.getClass().getMethod(path, HttpServletRequest.class, HttpServletResponse.class);
             Object invoke = method.invoke(this, req, resp);
-            System.out.println( invoke );
-            resp.getWriter().print(path + "方法 调用成功");
+            //System.out.println( invoke );
+            //resp.getWriter().print(path + "方法 调用成功");
         } catch (NoSuchMethodException e) {
             //e.printStackTrace();
             resp.getWriter().print("调用方法不存在");

+ 103 - 0
study/src/com/lovecoding/xml/study/utils/Captcha.java

@@ -0,0 +1,103 @@
+package com.lovecoding.xml.study.utils;
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.util.Random;
+
+public class Captcha {
+    public static final String RANDOMCODEKEY = "result";//放到session中的key
+    private Random random = new Random();
+    private String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz";//随机产生的字符串
+
+    private int width = 80;//图片宽
+    private int height = 26;//图片高
+    private int lineSize = 100;//干扰线数量
+    private int stringNum = 4;//随机产生字符数量
+
+    /**
+     * 生成随机图片
+     */
+    public void getRandcode(HttpServletRequest request, HttpServletResponse response) {
+
+        response.setContentType("image/jpeg");
+
+        HttpSession session = request.getSession(true);
+        //BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类
+        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
+        //产生Image对象的Graphics对象,改对象可以在图像上进行各种绘制操作
+        Graphics g = image.getGraphics();
+        g.fillRect(0, 0, width, height);
+        g.setFont(new Font("Times New Roman",Font.ROMAN_BASELINE,18));
+        g.setColor(getRandColor(160, 200));
+        //绘制干扰线
+        for(int i=0;i<=lineSize;i++){
+            drowLine(g);
+        }
+        //绘制随机字符
+        String randomString = "";
+        for(int i=1;i<=stringNum;i++){
+            randomString=drowString(g,randomString,i);
+        }
+        session.removeAttribute(RANDOMCODEKEY);
+        session.setAttribute(RANDOMCODEKEY, randomString);
+        g.dispose();
+        try {
+            //将内存中的图片通过流动形式输出到客户端
+            ImageIO.write(image, "JPEG", response.getOutputStream());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+    /*
+     * 获得字体
+     */
+    private Font getFont(){
+        return new Font("Fixedsys",Font.CENTER_BASELINE,20);
+    }
+    /*
+     * 获得颜色
+     */
+    private Color getRandColor(int fc,int bc){
+        if(fc > 255)
+            fc = 255;
+        if(bc > 255)
+            bc = 255;
+        int r = fc + random.nextInt(bc-fc-16);
+        int g = fc + random.nextInt(bc-fc-14);
+        int b = fc + random.nextInt(bc-fc-18);
+        return new Color(r,g,b);
+    }
+
+    /*
+     * 绘制字符串
+     */
+    private String drowString(Graphics g,String randomString,int i){
+        g.setFont(getFont());
+        g.setColor(new Color(random.nextInt(101),random.nextInt(111),random.nextInt(121)));
+        String rand = String.valueOf(getRandomString(random.nextInt(randString.length())));
+        randomString +=rand;
+        g.translate(random.nextInt(3), random.nextInt(3));
+        g.drawString(rand, 13*i, 16);
+        return randomString;
+    }
+    /*
+     * 绘制干扰线
+     */
+    private void drowLine(Graphics g){
+        int x = random.nextInt(width);
+        int y = random.nextInt(height);
+        int xl = random.nextInt(13);
+        int yl = random.nextInt(15);
+        g.drawLine(x, y, x+xl, y+yl);
+    }
+    /*
+     * 获取随机的字符
+     */
+    public String getRandomString(int num){
+        return String.valueOf(randString.charAt(num));
+    }
+}

+ 1 - 1
study/web/WEB-INF/mybatis-config.xml

@@ -16,6 +16,6 @@
 </environments>
 
 <mappers>
-    <package name="com.lovecoding.study.mapper" />
+    <package name="com.lovecoding.xml.study.mapper" />
 </mappers>
 </configuration>

+ 6 - 1
study/web/register.jsp

@@ -35,7 +35,7 @@
                 <td>验证码</td>
                 <td class="inputs">
                     <input name="checkCode" type="text" id="checkCode">
-                    <img src="imgs/a.jpg">
+                    <img id="captcha" src="${pageContext.servletContext.contextPath}/test/methods">
                     <a href="#" id="changeImg">看不清?</a>
                 </td>
             </tr>
@@ -45,6 +45,11 @@
         </div>
         <br class="clear">
     </form>
+    <script>
+        document.getElementById("changeImg").onclick = function(){
+            document.getElementById("captcha").src = "${pageContext.servletContext.contextPath}/test/methods?t=" + (new Date()).getTime()
+        }
+    </script>
 </div>
 </body>
 </html>