Pārlūkot izejas kodu

验证码组件开发

wuxw7 7 gadi atpakaļ
vecāks
revīzija
25d7cfbfe9

+ 39 - 0
WebService/src/main/java/com/java110/web/components/ValidateCodeComponent.java

@@ -0,0 +1,39 @@
+package com.java110.web.components;
+
+import com.java110.core.context.IPageData;
+import com.java110.web.smo.ILoginServiceSMO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+/**
+ * 验证码组件
+ * Created by wuxw on 2019/3/20.
+ */
+@Component("validate-code")
+public class ValidateCodeComponent {
+
+    @Autowired
+    private ILoginServiceSMO loginServiceSMOImpl;
+    public ResponseEntity<String> generateValidateCode(IPageData pd){
+
+        ResponseEntity<String> responseEntity = null;
+        try{
+            responseEntity =  loginServiceSMOImpl.generateValidateCode(pd);
+        }catch (Exception e){
+            responseEntity = new ResponseEntity<String>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+        }finally {
+            return responseEntity;
+        }
+    }
+
+
+    public ILoginServiceSMO getLoginServiceSMOImpl() {
+        return loginServiceSMOImpl;
+    }
+
+    public void setLoginServiceSMOImpl(ILoginServiceSMO loginServiceSMOImpl) {
+        this.loginServiceSMOImpl = loginServiceSMOImpl;
+    }
+}

+ 3 - 0
WebService/src/main/java/com/java110/web/controller/CallComponentController.java

@@ -16,6 +16,9 @@ import javax.servlet.http.HttpServletRequest;
 import java.lang.reflect.Method;
 
 
+/**
+ * 组件调用处理类
+ */
 @RestController
 public class CallComponentController extends BaseController {
 

+ 8 - 0
WebService/src/main/java/com/java110/web/smo/ILoginServiceSMO.java

@@ -14,4 +14,12 @@ public interface ILoginServiceSMO {
      * @return
      */
     public ResponseEntity<String> doLogin(IPageData pd);
+
+
+    /**
+     * 生成验证码信息
+     * @param pd 页面请求对象
+     * @return
+     */
+    public ResponseEntity<String> generateValidateCode(IPageData pd);
 }

+ 40 - 0
WebService/src/main/java/com/java110/web/smo/impl/LoginServiceSMOImpl.java

@@ -15,6 +15,10 @@ import org.springframework.http.*;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.util.Random;
+
 /**
  * 登录信息实现类
  * Created by wuxw on 2019/3/20.
@@ -25,6 +29,11 @@ public class LoginServiceSMOImpl extends BaseServiceSMO implements ILoginService
     private final static Logger logger = LoggerFactory.getLogger(LoginServiceSMOImpl.class);
 
 
+    private static char[] chs = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
+    private static final int NUMBER_OF_CHS = 4;
+    private static final int IMG_WIDTH = 65;
+    private static final int IMG_HEIGHT = 25;
+    private static Random r = new Random();
     @Autowired
     private RestTemplate restTemplate;
 
@@ -49,6 +58,37 @@ public class LoginServiceSMOImpl extends BaseServiceSMO implements ILoginService
         return responseEntity;
     }
 
+    /**
+     * 生成验证码
+     * 参考地址:https://www.cnblogs.com/happyfans/p/4486010.html
+     * @param pd 页面请求对象
+     * @return
+     */
+    @Override
+    public ResponseEntity<String> generateValidateCode(IPageData pd) {
+
+
+
+        BufferedImage image = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_RGB);    // 实例化BufferedImage
+                    Graphics g = image.getGraphics();
+                    Color c = new Color(200, 200, 255);                                             // 验证码图片的背景颜色
+                    g.setColor(c);
+                    g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT);                                        // 图片的边框
+
+                    StringBuffer sb = new StringBuffer();                                           // 用于保存验证码字符串
+                    int index;                                                                      // 数组的下标
+                    for (int i = 0; i < NUMBER_OF_CHS; i++) {
+                            index = r.nextInt(chs.length);                                              // 随机一个下标
+                            g.setColor(new Color(r.nextInt(88), r.nextInt(210), r.nextInt(150)));       // 随机一个颜色
+                            g.drawString(chs[index] + "", 15 * i + 3, 18);                              // 画出字符
+                            sb.append(chs[index]);                                                      // 验证码字符串
+                        }
+
+                    /*request.getSession().setAttribute("piccode", sb.toString());                    // 将验证码字符串保存到session中
+                    ImageIO.write(image, "jpg", response.getOutputStream());*/
+        return null;
+    }
+
     public RestTemplate getRestTemplate() {
         return restTemplate;
     }

+ 4 - 1
java110-core/src/main/java/com/java110/core/context/IPageData.java

@@ -21,6 +21,8 @@ public interface IPageData {
 
     public void setToken(String token);
 
+    public String getSessionId();
+
     public String getReqData();
 
     public String getResponseTime();
@@ -33,6 +35,7 @@ public interface IPageData {
 
     public void setResponseEntity(ResponseEntity responseEntity);
 
-    public IPageData builder(String userId,String token,String reqData,String componentCode,String componentMethod,String url) throws IllegalArgumentException;
+    public IPageData builder(String userId,String token,String reqData,String componentCode,String componentMethod,String url,String sessionId)
+            throws IllegalArgumentException;
 
 }

+ 14 - 1
java110-core/src/main/java/com/java110/core/context/PageData.java

@@ -24,6 +24,9 @@ public class PageData implements IPageData,Serializable {
 
     private String userId ;
 
+    //会话ID
+    private String sessionId;
+
     private String transactionId;
 
     private String requestTime;
@@ -99,6 +102,15 @@ public class PageData implements IPageData,Serializable {
         this.token = token;
     }
 
+    @Override
+    public String getSessionId() {
+        return sessionId;
+    }
+
+    public void setSessionId(String sessionId) {
+        this.sessionId = sessionId;
+    }
+
     public void setReqData(String reqData) {
         this.reqData = reqData;
     }
@@ -138,7 +150,7 @@ public class PageData implements IPageData,Serializable {
         return this;
     }
 
-    public IPageData builder(String userId,String token,String reqData,String componentCode,String componentMethod,String url)
+    public IPageData builder(String userId,String token,String reqData,String componentCode,String componentMethod,String url,String sessionId)
             throws IllegalArgumentException{
         this.setComponentCode(componentCode);
         this.setComponentMethod(componentMethod);
@@ -147,6 +159,7 @@ public class PageData implements IPageData,Serializable {
         this.setUserId(userId);
         this.setToken(token);
         this.setUrl(url);
+        this.setSessionId(sessionId);
 
         return this;
     }

+ 2 - 1
java110-service/src/main/java/com/java110/service/aop/PageProcessAspect.java

@@ -56,6 +56,7 @@ public class PageProcessAspect {
         IPageData pd = null;
         String reqData = "";
         String userId = "";
+        String sessionId = request.getSession().getId();
         if("POST,PUT".contains(request.getMethod())){
             InputStream in = request.getInputStream();
             BufferedReader reader = new BufferedReader(new InputStreamReader(in));
@@ -108,7 +109,7 @@ public class PageProcessAspect {
             }
         }
 
-         pd = PageData.newInstance().builder(userId,this.getToken(request),reqData,componentCode,componentMethod,url);
+         pd = PageData.newInstance().builder(userId,this.getToken(request),reqData,componentCode,componentMethod,url,sessionId);
         request.setAttribute(CommonConstant.CONTEXT_PAGE_DATA,pd);
 
     }