package com.xcong.excoin.common.system.controller; import cn.hutool.core.util.IdUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.common.contants.AppContants; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.common.system.bean.LoginUserBean; import com.xcong.excoin.common.system.dto.LoginDto; import com.xcong.excoin.configurations.properties.ApplicationProperties; import com.xcong.excoin.configurations.properties.SecurityProperties; import com.xcong.excoin.utils.RedisUtils; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.core.Authentication; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; /** * @Author wzy * @Date 2020/5/11 * @email wangdoubleone@gmail.com * @Version V1.0 **/ @Slf4j @Api(value = "登陆类", tags = "登陆类") @RestController @RequestMapping(value = "/") public class LoginController { @Resource private ApplicationProperties applicationProperties; @Resource private SecurityProperties securityProperties; @Resource private AuthenticationManagerBuilder authenticationManagerBuilder; @Resource private RedisUtils redisUtils; @PostMapping("/login") public Result login(@RequestBody @Validated LoginDto loginDto) { UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(loginDto.getUsername(), loginDto.getPassword()); Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authToken); String token = IdUtil.simpleUUID(); LoginUserBean loginUserBean = (LoginUserBean) authentication.getPrincipal(); redisUtils.set(AppContants.APP_LOGIN_PREFIX + token, JSONObject.toJSONString(loginUserBean), 300000); Map authInfo = new HashMap<>(); if (applicationProperties.isDebug()) { authInfo.put("token", token); authInfo.put("rsaToken", generateAsaToken(token)); authInfo.put("user", loginUserBean); } else { authInfo.put("token", token); authInfo.put("user", loginUserBean); } return Result.ok("success", authInfo); } public String generateAsaToken(String token) { RSA rsa = new RSA(null, securityProperties.getPublicKey()); return rsa.encryptBase64(token + "_" +System.currentTimeMillis(), KeyType.PublicKey); } }