AnonymousController.java 3.0 KB
package com.tianbo.warehouse.controller;

import com.alibaba.fastjson.JSON;

import com.google.code.kaptcha.impl.DefaultKaptcha;

import com.thoughtworks.xstream.core.util.Base64Encoder;
import com.tianbo.warehouse.controller.response.ResultJson;
import com.tianbo.warehouse.model.ROLE;
import com.tianbo.warehouse.service.RoleService;

import com.tianbo.warehouse.util.RedisUtils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.imageio.ImageIO;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@Slf4j
@RestController()
@RequestMapping("/anonymous")
public class AnonymousController {

    @Autowired
    RoleService roleService;

    @Autowired
    RedisUtils redisUtils;

    @Autowired
    private  DefaultKaptcha captchaProducer;

    /**
     * 配置匿名者可以访问的路由,并更新到redis,匿名者默认可以访问的role_name =ROLE_anonymous
     * 此方法会将所有符合权限组名=ROLE_anonymous的权限更新到redis中,供gateway调用判断权限
     * @return
     */
    @PostMapping("initAnonymousRoute")
    public ResultJson initAnonymousRoute(){
        List<ROLE> list = roleService.getROLE_anonymousPermList();
        String json = JSON.toJSONString(list);
        boolean result= redisUtils.set("ROLE_anonymous_routers", json,0);
        return result  ? new ResultJson("200","匿名者权限配置成功") :new ResultJson("500","匿名者权限配置失败");
    }

    /**
     * 生成验证码
     */
    @RequestMapping(value = "/randCode")
    public ResultJson getRandCode(){

        // 获取验证码上的文字
        String capText = captchaProducer.createText();

        //  将文件渲染到图片上
        BufferedImage bi = captchaProducer.createImage(capText);
        ByteArrayOutputStream outputStream = null;
        outputStream = new ByteArrayOutputStream();
        Base64Encoder encoder = new Base64Encoder();
        Map<String,Object> map = new HashMap<>();
        String verifyToken = "";
        try {
            verifyToken =  UUID.randomUUID().toString();
            redisUtils.set("verifyToken_" + verifyToken,capText,120);
            ImageIO.write(bi, "jpeg", outputStream);
            map.put("verifyImg","data:image/jpeg;base64,"+encoder.encode(outputStream.toByteArray()));
        } catch (IOException e) {
            e.printStackTrace();
            return new ResultJson("500","verify get error");
        }
        return new ResultJson("200","verify get ok",map,verifyToken);

    }
}