whycxzp
2022-05-13 cc9f3e54d119db2320b2653643e03617dce9d8fc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package com.whyc.controller;
 
import com.whyc.dto.Response;
import com.whyc.dto.SignDTO;
import com.whyc.pojo.UserInf;
import com.whyc.service.LoginService;
import com.whyc.service.UserService;
import com.whyc.util.ActionUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.annotations.ApiIgnore;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.swing.*;
import java.io.IOException;
 
@RequestMapping("login")
@RestController
@Api(tags = "登录")
public class LoginController {
 
    @Autowired
    private LoginService service;
    @Autowired
    private UserService userService;
 
    @PostMapping("login")
    @ApiOperation(value ="登录-账号密码")
    public Response login(@RequestParam String userName, String password,HttpServletRequest request){
        return service.login(userName,password,request);
    }
    @PostMapping("loginByRSA")
    @ApiOperation(value ="登录-账号密码加密")
    public Response loginByRSA(@RequestParam String userName, String password,String deliveredCode,HttpServletRequest request){
        return service.loginByRSA(userName,password,deliveredCode,request);
    }
 
    @PostMapping("loginWithUKey")
    @ApiOperation(value ="登录-uKey-TODO")
    public Response loginWithUKey(@RequestParam String userName,
                                  @RequestParam String password,
                                  @RequestParam String uKeyId,
                                  HttpServletRequest request){
        return service.loginWithUKey(userName,password,uKeyId,request);
    }
 
    @GetMapping("/getRandom")
    @ApiOperation(value = "uKey校验前生成随机数")
    public Response getRandom(){
        int randomNum = (int)((Math.random()*9+1)*10000);
        ActionUtil.getSession().setAttribute("uKeyRandom",String.valueOf(randomNum));
        return new Response().set(1,randomNum);
    }
    @PostMapping("/verify")
    @ApiOperation(value = "校验签名")
    public Response verify(@RequestBody SignDTO signDTO){
        Response response = new Response();
        //前端将字符\替换成了huodongwei,这里再转回来
        signDTO.setInPath(signDTO.getInPath().replace("huodongwei","\\"));
        //通过uKeyId获取公钥XY
        //UserInf userInf = userService.getPublicXYByUKeyId(signDTO.getUKeyId());
        UserInf userInf = userService.getUserByUKeyId(signDTO.getUKeyId());
        //获取之前生成的随机数
        String uKeyRandom = (String) ActionUtil.getSession().getAttribute("uKeyRandom");
        boolean b = com.whyc.softkey.jsyunew3.YtVerfiy(userInf.getUName(), uKeyRandom, signDTO.getPublicX(), signDTO.getPublicY(), signDTO.getSign(), signDTO.getInPath());
        long lastError = com.whyc.softkey.jsyunew3.get_LastError();
        if(b && lastError==0){
            response.set(1,"校验成功");
        }else {
            if (lastError == 0){
                response.set(0,"校验失败");
            }else{
                String baseMsg ="校验失败,原因为:";
                switch ((int) lastError){
                    case -82 : response.setMsg(baseMsg+"写数据到加密锁储存器时错误,可能是写密码错误");break;
                    case -81 :
                    case -88 : response.setMsg(baseMsg+"输入的地址空间超出");break;
                    case -47 : response.setMsg(baseMsg+"进行读写字符串时,地址空间超出");break;
                    case -92 : response.setMsg(baseMsg+"不存在指定的加密锁");break;
                    case -93 :
                    case -94 : response.setMsg(baseMsg+"操作加密锁时错误");break;
                    case -83 : response.setMsg(baseMsg+"从加密锁读取数据时错误,可能是读密码错误");break;
                    case -46 : response.setMsg(baseMsg+"使用控件时,输入的字符不能是空字符串");break;
                    case -51 : response.setMsg(baseMsg+"打开USB文件句柄失败(iKey)");break;
                }
            }
        }
        return response;
    }
 
 
    @PostMapping("logout")
    @ApiOperation(value ="退出登录")
    public void logout(){
        service.logout();
    }
 
    /**拦截登录*//*
    @GetMapping("/")
    @ApiIgnore
    public ModelAndView toLoginHtml(HttpServletRequest request, HttpServletResponse response,ModelAndView view) throws ServletException, IOException {
        //request.getRequestDispatcher("login.html").forward(request,response);
        System.out.println("转发啦...");
        //response.setContentType("text/html;charset=utf-8");
        //response.sendRedirect("http://localhost:8090/login.html");
        //response.sendRedirect("/login.html");
        view.setViewName("login");
        return view;
    }*/
 
    /**拦截登录*/
    @GetMapping("unauthorized")
    @ApiIgnore
    public void unauthorized(HttpServletRequest request,HttpServletResponse response) throws IOException {
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write("您未获取到接口的调用授权,拒绝访问!");
    }
 
    @PostMapping("/check")
    @ApiOperation(value = "判断是否有另一同一账号登录的用户")
    public Response check(){
        Response response = service.checkUser();
        //当前用户
        HttpSession session = ActionUtil.getSession();
        UserInf uinf=(UserInf) session.getAttribute("user");
        if(response.getCode() == 1){
            session.invalidate();        //清除当前的session;                //清除session
        }
        return response;
    }
 
}