You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

113 lines
3.6 KiB

/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有,侵权必究!
*/
package com.epmet.controller;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.exception.ErrorCode;
import com.epmet.commons.tools.security.user.UserDetail;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.AuthorizationDTO;
import com.epmet.dto.CustomerStaffDTO;
import com.epmet.dto.LoginDTO;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.service.AuthService;
import com.epmet.service.CaptchaService;
import com.epmet.service.ResourceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
/**
* 授权管理
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@RestController
@Api(tags="授权管理")
public class AuthController {
@Autowired
private AuthService authService;
@Autowired
private ResourceService resourceService;
@Autowired
private CaptchaService captchaService;
@GetMapping("captcha")
@ApiOperation(value = "验证码", produces="application/octet-stream")
@ApiImplicitParam(paramType = "query", dataType="string", name = "uuid", required = true)
public void captcha(HttpServletResponse response, String uuid)throws IOException {
//uuid不能为空
AssertUtils.isBlank(uuid, ErrorCode.IDENTIFIER_NOT_NULL);
//生成图片验证码
BufferedImage image = captchaService.create(uuid);
response.setHeader("Cache-Control", "no-store, no-cache");
response.setContentType("image/jpeg");
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
out.close();
}
@PostMapping(value = "login")
@ApiOperation(value = "登录")
public Result<AuthorizationDTO> login(@RequestBody LoginDTO login){
//效验数据
ValidatorUtils.validateEntity(login);
//验证码是否正确
boolean flag = captchaService.validate(login.getUuid(), login.getCaptcha());
if(!flag){
return new Result<AuthorizationDTO>().error(ErrorCode.CAPTCHA_ERROR);
}
//获取登录授权信息
AuthorizationDTO authorization = authService.login(login);
return new Result<AuthorizationDTO>().ok(authorization);
}
@PostMapping(value = "logout")
@ApiOperation(value = "退出")
public Result logout(HttpServletRequest request){
String userId = request.getHeader(Constant.USER_KEY);
authService.logout(Long.parseLong(userId));
return new Result();
}
/**
* 是否有资源访问权限
* @param token token
* @param url 资源URL
* @param method 请求方式
*
* @return 有访问权限,则返回用户信息
*/
@PostMapping("resource")
public Result<UserDetail> resource(@RequestParam(value = "token", required = false) String token,
@RequestParam("url") String url, @RequestParam("method") String method){
UserDetail data = resourceService.resource(token, url, method);
return new Result<UserDetail>().ok(data);
}
}