|
- package com.iformall.controller;
-
- import com.google.code.kaptcha.Constants;
- import com.google.code.kaptcha.Producer;
- import com.iformall.common.ErrorCode;
- import com.iformall.common.ResultData;
- import com.iformall.controller.base.BaseController;
- import com.iformall.domain.po.MallUserInfo;
- import com.iformall.exception.MallinkException;
- import com.iformall.shiro.UserSession;
- import com.iformall.utils.ShiroUtils;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import org.apache.commons.io.IOUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.shiro.SecurityUtils;
- import org.apache.shiro.authc.UsernamePasswordToken;
- import org.apache.shiro.subject.Subject;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- 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 javax.imageio.ImageIO;
- import javax.servlet.ServletException;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.Cookie;
- import javax.servlet.http.HttpServletResponse;
- import java.awt.image.BufferedImage;
- import java.io.IOException;
-
-
- @RestController
- @Api(description = "登录相关接口")
- public class HomeController extends BaseController {
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
- @Value("${version}")
- private String version;
-
- @Autowired
- private Producer producer;
-
-
- @GetMapping("/captcha.jpg")
- public void captcha(HttpServletResponse response)throws ServletException, IOException {
- logger.debug("[" + getIpAddr() + "] HomeController::captcha");
- response.setHeader("Cache-Control", "no-store, no-cache");
- response.setContentType("image/jpeg");
-
- //生成文字验证码
- String text = producer.createText();
- //生成图片验证码
- BufferedImage image = producer.createImage(text);
- //保存到shiro session
- ShiroUtils.setSessionAttribute(Constants.KAPTCHA_SESSION_KEY, text);
-
- ServletOutputStream out = response.getOutputStream();
- ImageIO.write(image, "jpg", out);
- IOUtils.closeQuietly(out);
- }
-
- @ApiOperation("登录")
- @PostMapping("/doLogin")
- public ResultData login(@RequestBody MallUserInfo user, HttpServletResponse response) {
- logger.debug("[" + getIpAddr() + "] HomeController::login");
-
- try {
- String kaptcha = ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY);
- if(!user.getCaptcha().equalsIgnoreCase(kaptcha)){
- return new ResultData(ErrorCode.KAPCHA_NOT_EQUAL);
- }
- } catch (MallinkException e) {
- logger.error("验证码" + e.getMessage());
- return new ResultData(ErrorCode.KAPCHA_NOT_VALID.getCode(), e.getMessage());
- }
-
-
- ResultData data = new ResultData();
- if (StringUtils.isBlank(user.getUsername()) || StringUtils.isBlank(user.getPassword())) {
- // throw new SystemException(ErrorCode.LOGIN_USER_OR_PWD_ERROR);
- return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
- }
- try {
- Subject subject = SecurityUtils.getSubject();
- UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPassword());
- subject.login(token);
- MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo);
- info.setPassword("保密");
- info.setBopenId("保密");
- if(StringUtils.isNotBlank(info.getWebOpenId())) {
- info.setWebOpenId("保密");
- }
-
- Cookie unameCookie = new Cookie("uname", info.getUsername());
- unameCookie.setMaxAge(60);
- response.addCookie(unameCookie);
-
- data.data = info;
- } catch (Exception e) {
- return new ResultData(ErrorCode.USER_PASSWD_ERR);
- }
- return data;
- }
-
- @ApiOperation("登出")
- @GetMapping("/logout")
- public ResultData logout() {
- logger.debug("[" + getIpAddr() + "] HomeController::logout");
- ResultData data = new ResultData();
- SecurityUtils.getSubject().logout();
- return data;
- }
-
- @ApiOperation("获取后端版本号")
- @GetMapping("/version")
- public ResultData version() {
- return new ResultData(version);
- }
- }
|