Explorar o código

添加登录接口

523096025 %!s(int64=4) %!d(string=hai) anos
pai
achega
19e116e389
Modificáronse 20 ficheiros con 653 adicións e 0 borrados
  1. 27 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/controller/MobileApiController.java
  2. 62 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/controller/MobileUserController.java
  3. 44 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/domain/MobileApi.java
  4. 38 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/domain/MobileAttention.java
  5. 33 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/domain/MobileMemorandum.java
  6. 29 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/domain/MobileRemember.java
  7. 38 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/domain/MobileUnit.java
  8. 68 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/domain/MobileUser.java
  9. 10 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/repo/MobileApiRepository.java
  10. 9 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/repo/MobileAttentionRepository.java
  11. 9 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/repo/MobileMemorandumRepository.java
  12. 9 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/repo/MobileRememberRepository.java
  13. 9 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/repo/MobileUnitRepository.java
  14. 12 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/repo/MobileUserRepository.java
  15. 28 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/result/Result.java
  16. 14 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/service/MobileApiService.java
  17. 14 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/service/MobileUserService.java
  18. 32 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/service/impl/MobileApiServiceImpl.java
  19. 68 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/service/impl/MobileUserServiceImpl.java
  20. 100 0
      huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/utils/CheckNumber.java

+ 27 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/controller/MobileApiController.java

@@ -0,0 +1,27 @@
+package com.huimv.mobile.controller;
+
+import com.huimv.mobile.domain.MobileApi;
+import com.huimv.mobile.result.Result;
+import com.huimv.mobile.service.MobileApiService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.mobile.controller
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2021/4/19 0019 13:52
+ **/
+@RestController
+@RequestMapping("/api")
+public class MobileApiController {
+
+    @Autowired
+    private MobileApiService mobileApiService;
+
+    public Result findAll(){
+        return  mobileApiService.findAll();
+    }
+}

+ 62 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/controller/MobileUserController.java

@@ -0,0 +1,62 @@
+package com.huimv.mobile.controller;
+
+import com.huimv.mobile.result.Result;
+import com.huimv.mobile.service.MobileUserService;
+import com.huimv.mobile.utils.CheckNumber;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletResponse;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.mobile.controller
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2021/4/19 0019 14:22
+ **/
+@RestController
+@RequestMapping("/mobileUser")
+public class MobileUserController {
+
+    @Autowired
+    private MobileUserService userService;
+
+    @RequestMapping("/register")
+    public Result register(String account,String password){
+        return userService.register(account,password);
+    }
+
+
+
+    private static String text;
+    //获取验证码
+    @RequestMapping(value = "getCheckNumber", produces = {"text/html;charset=UTF-8"})
+    public void getCheckNumber(HttpServletResponse response) throws IOException {
+        //创建对象
+        CheckNumber checkNumber = new CheckNumber();
+        //获取图片对象
+        BufferedImage image = checkNumber.getImage();
+        //获得图片的文本内容
+        text = checkNumber.getText();
+        //把图片返回前端
+        ImageIO.write(image, "JPEG", response.getOutputStream());
+    }
+
+    @RequestMapping("/checkNumber")
+    public Result checkNumber(String userCaptcha){
+        //获取用户输入的校验码并进行比较
+        // String sessionCheckNumber = (String) session.getAttribute("checkNumber");
+        System.out.println(userCaptcha +":"+ text);
+        if (text.equalsIgnoreCase(userCaptcha)) {
+            return new Result(10001,"验证码正确",true);
+        }
+        return new Result(10002,"验证码错误",false);
+    }
+
+
+}

+ 44 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/domain/MobileApi.java

@@ -0,0 +1,44 @@
+package com.huimv.mobile.domain;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Entity
+@Table(name = "mobile_api")
+@Data
+public class MobileApi implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id", nullable = false)
+    private Integer id;
+
+    /**
+     * 牧场名称
+     */
+    @Column(name = "farm_name")
+    private String farmName;
+
+    /**
+     * 牧场id
+     */
+    @Column(name = "farm_id")
+    private Integer farmId;
+
+    /**
+     * API接口
+     */
+    @Column(name = "url")
+    private String url;
+
+    /**
+     * 备注
+     */
+    @Column(name = "remark")
+    private String remark;
+
+}

+ 38 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/domain/MobileAttention.java

@@ -0,0 +1,38 @@
+package com.huimv.mobile.domain;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Entity
+@Table(name = "mobile_attention")
+@Data
+public class MobileAttention implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id", nullable = false)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "user_id")
+    private Integer userId;
+
+    /**
+     * 显示区域
+     */
+    @Column(name = "area_id")
+    private Integer areaId;
+
+    /**
+     * 单位id
+     */
+    @Column(name = "unit_id")
+    private Integer unitId;
+
+}

+ 33 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/domain/MobileMemorandum.java

@@ -0,0 +1,33 @@
+package com.huimv.mobile.domain;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+@Entity
+@Table(name = "mobile_memorandum")
+@Data
+public class MobileMemorandum implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id", nullable = false)
+    private Integer id;
+
+    @Column(name = "user_id")
+    private Integer userId;
+
+    @Column(name = "content")
+    private String content;
+
+    @Column(name = "title")
+    private String title;
+
+    @Column(name = "date")
+    private Date date;
+
+}

+ 29 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/domain/MobileRemember.java

@@ -0,0 +1,29 @@
+package com.huimv.mobile.domain;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Entity
+@Table(name = "mobile_remember")
+@Data
+public class MobileRemember implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id", nullable = false)
+    private Integer id;
+
+    @Column(name = "user_id")
+    private Integer userId;
+
+    @Column(name = "issue")
+    private String issue;
+
+    @Column(name = "answer")
+    private String answer;
+
+}

+ 38 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/domain/MobileUnit.java

@@ -0,0 +1,38 @@
+package com.huimv.mobile.domain;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Entity
+@Data
+@Table(name = "mobile_unit")
+public class MobileUnit implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id", nullable = false)
+    private Integer id;
+
+    /**
+     * 单位全称
+     */
+    @Column(name = "full_name")
+    private String fullName;
+
+    /**
+     * 单位简称
+     */
+    @Column(name = "short_name")
+    private String shortName;
+
+    /**
+     * 备注
+     */
+    @Column(name = "remark")
+    private String remark;
+
+}

+ 68 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/domain/MobileUser.java

@@ -0,0 +1,68 @@
+package com.huimv.mobile.domain;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Entity
+@Data
+@Table(name = "mobile_user")
+public class MobileUser implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id", nullable = false)
+    private Integer id;
+
+    /**
+     * 姓名
+     */
+    @Column(name = "user_name")
+    private String userName;
+
+    /**
+     * 密码
+     */
+    @Column(name = "password")
+    private String password;
+
+    /**
+     * 账号
+     */
+    @Column(name = "account")
+    private String account;
+
+    /**
+     * 账号状态
+     */
+    @Column(name = "status")
+    private Integer status;
+
+    /**
+     * 所属单位
+     */
+    @Column(name = "unit")
+    private String unit;
+
+    /**
+     * 所属单位id
+     */
+    @Column(name = "unit_id")
+    private Integer unitId;
+
+    /**
+     * 职务
+     */
+    @Column(name = "job")
+    private String job;
+
+    /**
+     * 权限级别
+     */
+    @Column(name = "grant_class")
+    private Integer grantClass;
+
+}

+ 10 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/repo/MobileApiRepository.java

@@ -0,0 +1,10 @@
+package com.huimv.mobile.repo;
+
+import com.huimv.mobile.domain.MobileApi;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MobileApiRepository extends JpaRepository<MobileApi, Integer>, JpaSpecificationExecutor<MobileApi> {
+
+    MobileApi findByFarmId(Integer id);
+}

+ 9 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/repo/MobileAttentionRepository.java

@@ -0,0 +1,9 @@
+package com.huimv.mobile.repo;
+
+import com.huimv.mobile.domain.MobileAttention;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MobileAttentionRepository extends JpaRepository<MobileAttention, Integer>, JpaSpecificationExecutor<MobileAttention> {
+
+}

+ 9 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/repo/MobileMemorandumRepository.java

@@ -0,0 +1,9 @@
+package com.huimv.mobile.repo;
+
+import com.huimv.mobile.domain.MobileMemorandum;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MobileMemorandumRepository extends JpaRepository<MobileMemorandum, Integer>, JpaSpecificationExecutor<MobileMemorandum> {
+
+}

+ 9 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/repo/MobileRememberRepository.java

@@ -0,0 +1,9 @@
+package com.huimv.mobile.repo;
+
+import com.huimv.mobile.domain.MobileRemember;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MobileRememberRepository extends JpaRepository<MobileRemember, Integer>, JpaSpecificationExecutor<MobileRemember> {
+
+}

+ 9 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/repo/MobileUnitRepository.java

@@ -0,0 +1,9 @@
+package com.huimv.mobile.repo;
+
+import com.huimv.mobile.domain.MobileUnit;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MobileUnitRepository extends JpaRepository<MobileUnit, Integer>, JpaSpecificationExecutor<MobileUnit> {
+
+}

+ 12 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/repo/MobileUserRepository.java

@@ -0,0 +1,12 @@
+package com.huimv.mobile.repo;
+
+import com.huimv.mobile.domain.MobileUser;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MobileUserRepository extends JpaRepository<MobileUser, Integer>, JpaSpecificationExecutor<MobileUser> {
+
+    MobileUser findByAccountAndPassword(String account, String password);
+
+
+}

+ 28 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/result/Result.java

@@ -0,0 +1,28 @@
+package com.huimv.mobile.result;
+
+import lombok.Data;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.face.result
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2020/12/29 0029 14:46
+ **/
+@Data
+public class Result {
+    private Integer  status;
+    private String msg;
+    private Object data;
+
+    public Result(Integer status, String msg, Object data) {
+        this.status = status;
+        this.msg = msg;
+        this.data = data;
+    }
+
+    public Result(Integer status, String msg) {
+        this.status = status;
+        this.msg = msg;
+    }
+}

+ 14 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/service/MobileApiService.java

@@ -0,0 +1,14 @@
+package com.huimv.mobile.service;
+
+import com.huimv.mobile.result.Result;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.mobile.service
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2021/4/19 0019 13:54
+ **/
+public interface MobileApiService {
+    Result findAll();
+}

+ 14 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/service/MobileUserService.java

@@ -0,0 +1,14 @@
+package com.huimv.mobile.service;
+
+import com.huimv.mobile.result.Result;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.mobile.service
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2021/4/19 0019 14:23
+ **/
+public interface MobileUserService {
+    Result register(String account, String password);
+}

+ 32 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/service/impl/MobileApiServiceImpl.java

@@ -0,0 +1,32 @@
+package com.huimv.mobile.service.impl;
+
+import com.huimv.mobile.domain.MobileApi;
+import com.huimv.mobile.repo.MobileApiRepository;
+import com.huimv.mobile.result.Result;
+import com.huimv.mobile.service.MobileApiService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.mobile.service.impl
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2021/4/19 0019 13:54
+ **/
+@Service
+public class MobileApiServiceImpl implements MobileApiService {
+
+
+    @Autowired
+    private MobileApiRepository mobileApiRepository;
+
+
+    @Override
+    public Result findAll() {
+        List<MobileApi> all = mobileApiRepository.findAll();
+        return new Result(10000,"查询成功",all);
+    }
+}

+ 68 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/service/impl/MobileUserServiceImpl.java

@@ -0,0 +1,68 @@
+package com.huimv.mobile.service.impl;
+
+import com.huimv.mobile.domain.MobileApi;
+import com.huimv.mobile.domain.MobileUser;
+import com.huimv.mobile.repo.MobileApiRepository;
+import com.huimv.mobile.repo.MobileUserRepository;
+import com.huimv.mobile.result.Result;
+import com.huimv.mobile.service.MobileUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.mobile.service.impl
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2021/4/19 0019 14:23
+ **/
+@Service
+public class MobileUserServiceImpl implements MobileUserService {
+
+    @Autowired
+    private MobileUserRepository userRepository;
+
+    @Autowired
+    private MobileApiRepository mobileApiRepository;
+
+    @Override
+    public Result register(String account, String password) {
+
+        MobileUser mobileUser = userRepository.findByAccountAndPassword(account, password);
+
+        if (mobileUser == null){
+            return new Result(10001,"用户名或密码错误");
+        }
+
+
+
+        Map endMap  = new HashMap();
+        Integer grant = mobileUser.getGrantClass();
+        if (grant != 3){
+            List<MobileApi> all = mobileApiRepository.findAll();
+            endMap.put("url",all);
+            endMap.put("userName",mobileUser.getUserName());
+            endMap.put("userId",mobileUser.getId());
+            endMap.put("unit",mobileUser.getUnit());
+            endMap.put("grant",grant);
+        }
+        if (grant == 1 || grant == 2 ){
+
+            MobileApi api = mobileApiRepository.findByFarmId(mobileUser.getUnitId());
+            endMap.put("url",api.getUrl());
+            endMap.put("userName",mobileUser.getUserName());
+            endMap.put("userId",mobileUser.getId());
+            endMap.put("unit",mobileUser.getUnit());
+            endMap.put("grant",grant);
+
+        }else {
+            return new Result(10002,"未找到权限信息");
+        }
+
+        return new Result(10000,"登录成功",endMap);
+    }
+}

+ 100 - 0
huimv-mobile-video/huimv-mobile/src/main/java/com/huimv/mobile/utils/CheckNumber.java

@@ -0,0 +1,100 @@
+package com.huimv.mobile.utils;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Random;
+
+public class CheckNumber {
+    private int w = 70;//验证码图片宽
+    private int h = 35;//验证码图片高
+    private Random r = new Random();//随机对象
+    // {"宋体", "华文楷体", "黑体", "华文新魏", "华文隶书", "微软雅黑", "楷体_GB2312"}
+    private String[] fontNames = {"宋体", "华文楷体", "黑体", "微软雅黑", "楷体_GB2312"};
+    // 可选字符
+    private String codes = "0123456789abcdefghjkmnopqrstuvwxyz";
+    // 背景色
+    private Color bgColor = new Color(255, 255, 255);
+    // 验证码上的文本
+    private String text;
+
+    // 生成随机的颜色
+    private Color randomColor() {
+        int red = r.nextInt(150);
+        int green = r.nextInt(150);
+        int blue = r.nextInt(150);
+        return new Color(red, green, blue);
+    }
+
+    // 生成随机的字体
+    private Font randomFont() {
+        int index = r.nextInt(fontNames.length);
+        String fontName = fontNames[index];//生成随机的字体名称
+        int style = r.nextInt(4);//生成随机的样式, 0(无样式), 1(粗体), 2(斜体), 3(粗体+斜体)
+        int size = r.nextInt(5) + 24; //生成随机字号, 24 ~ 28
+        //Font对象的参数:1.字体名称2.字体样式3.字体大小
+        return new Font(fontName, style, size);
+    }
+
+    // 传入一个BufferImage对象,给图片画干扰线
+    private void drawLine(BufferedImage image) {
+        int num = 3;//一共画3条
+        Graphics2D g2 = (Graphics2D) image.getGraphics();
+        for (int i = 0; i < num; i++) {//生成两个点的坐标,即4个值
+            int x1 = r.nextInt(w);
+            int y1 = r.nextInt(h);
+            int x2 = r.nextInt(w);
+            int y2 = r.nextInt(h);
+            g2.setStroke(new BasicStroke(1.5F));
+            g2.setColor(Color.BLUE); //干扰线是蓝色
+            g2.drawLine(x1, y1, x2, y2);//画线
+        }
+    }
+
+    // 随机生成一个字符
+    private char randomChar() {
+        int index = r.nextInt(codes.length());
+        return codes.charAt(index);
+    }
+
+    // 创建BufferedImage
+    private BufferedImage createImage() {
+        BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
+        Graphics2D g2 = (Graphics2D) image.getGraphics();
+        g2.setColor(this.bgColor);
+        g2.fillRect(0, 0, w, h);
+        return image;
+    }
+
+    // 调用这个方法得到验证码
+    public BufferedImage getImage() {
+        BufferedImage image = createImage();//创建图片缓冲区
+        Graphics2D g2 = (Graphics2D) image.getGraphics();//得到绘制环境
+        StringBuilder sb = new StringBuilder();//用来装载生成的验证码文本
+        // 向图片中画4个字符
+        for (int i = 0; i < 4; i++) {//循环四次,每次生成一个字符
+            String s = randomChar() + "";//随机生成一个字母
+            sb.append(s); //把字母添加到sb中
+            float x = i * 1.0F * w / 4; //设置当前字符的x轴坐标
+            g2.setFont(randomFont()); //设置随机字体
+            g2.setColor(randomColor()); //设置随机颜色
+            g2.drawString(s, x, h - 5); //画图
+        }
+        this.text = sb.toString(); //把生成的字符串赋给了this.text
+        drawLine(image); //添加干扰线
+        return image;
+    }
+
+    // 返回验证码图片上的文本
+    public String getText() {
+        return text;
+    }
+
+    // 保存图片到指定的输出流
+    public static void output(BufferedImage image, OutputStream out)
+            throws IOException {
+        ImageIO.write(image, "JPEG", out);
+    }
+}