• 生成图片验证码


    <!-- kaptcha -->
            <dependency>
                <groupId>com.github.axet</groupId>
                <artifactId>kaptcha</artifactId>
                <version>0.0.9</version>
            </dependency>
    package com.tszr.mango.config;
    
    import java.util.Properties;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import com.google.code.kaptcha.impl.DefaultKaptcha;
    import com.google.code.kaptcha.util.Config;
    
    @Configuration
    public class KaptchaConfig {
    
        @Bean
        public DefaultKaptcha producer() {
            Properties properties = new Properties();
            properties.put("kaptcha.border", "no");
            properties.put("kaptcha.textproducer.font.color", "black");
            properties.put("kaptcha.textproducer.char.space", "5");
            Config config = new Config(properties);
            DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
            defaultKaptcha.setConfig(config);
            return defaultKaptcha;
        }
    }
    package com.tszr.mango.controller;
    
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.security.authentication.AuthenticationManager;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.google.code.kaptcha.Constants;
    import com.google.code.kaptcha.Producer;
    import com.tszr.mango.common.utils.IOUtils;
    import com.tszr.mango.core.http.HttpResult;
    import com.tszr.mango.model.SysUser;
    import com.tszr.mango.security.JwtAuthenticatioToken;
    import com.tszr.mango.service.SysUserService;
    import com.tszr.mango.util.PasswordUtils;
    import com.tszr.mango.util.SecurityUtils;
    import com.tszr.mango.vo.LoginBean;
    
    @RestController
    public class SysLoginController {
    
        @Autowired
        private Producer producer;
        @Autowired
        private SysUserService sysUserService;
        @Autowired
        private AuthenticationManager authenticationManager;
    
        @GetMapping("captcha.jpg")
        public void captcha(HttpServletResponse response, HttpServletRequest request) throws ServletException, IOException {
            response.setHeader("Cache-Control", "no-store, no-cache");
            response.setContentType("image/jpeg");
    
            // 生成文字验证码
            String text = producer.createText();
            // 生成图片验证码
            BufferedImage image = producer.createImage(text);
            // 保存到验证码到 session
            request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, text);
    
            ServletOutputStream out = response.getOutputStream();
            ImageIO.write(image, "jpg", out);    
            IOUtils.closeQuietly(out);
        }
    
        /**
         * 登录接口
         */
        @PostMapping(value = "/login")
        public HttpResult login(@RequestBody LoginBean loginBean, HttpServletRequest request) throws IOException {
            String username = loginBean.getAccount();
            String password = loginBean.getPassword();
            String captcha = loginBean.getCaptcha();
            // 从session中获取之前保存的验证码跟前台传来的验证码进行匹配
            Object kaptcha = request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
            if(kaptcha == null){
                return HttpResult.error("验证码已失效");
            }
            if(!captcha.equals(kaptcha)){
                return HttpResult.error("验证码不正确");
            }
            // 用户信息
            SysUser user = sysUserService.findByName(username);
            // 账号不存在、密码错误
            if (user == null) {
                return HttpResult.error("账号不存在");
            }
            if (!PasswordUtils.matches(user.getSalt(), password, user.getPassword())) {
                return HttpResult.error("密码不正确");
            }
            // 账号锁定
            if (user.getStatus() == 0) {
                return HttpResult.error("账号已被锁定,请联系管理员");
            }
            // 系统登录认证
            JwtAuthenticatioToken token = SecurityUtils.login(request, username, password, authenticationManager);
            return HttpResult.ok(token);
        }
    }
  • 相关阅读:
    28、数组中出现次数超过一半的数字
    27、字符串的排列
    26、二叉搜索树与双向链表
    21、栈的压入、弹出序列
    22、从上往下打印二叉树
    23、二叉搜索树的后序遍历序列
    24、二叉树中和为某一值的路径
    25、复杂链表的复制
    4、简单工厂模式,工厂方法模式,
    基数排序
  • 原文地址:https://www.cnblogs.com/tszr/p/15943168.html
Copyright © 2020-2023  润新知