kongzy
2023-10-11 374fb9d9369271b9b858e11a8612850ad3560936
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
package com.nanometer.smartlab.controller;
 
import com.nanometer.smartlab.entity.SysUser;
import com.nanometer.smartlab.service.SysUserService;
import com.nanometer.smartlab.util.Constants;
import com.nanometer.smartlab.util.FacesUtils;
import org.apache.log4j.Logger;
import org.apache.shiro.authc.DisabledAccountException;
import org.apache.shiro.authc.ExcessiveAttemptsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
 
import javax.annotation.Resource;
 
/**
 * Created by johnny on 15/12/24.
 */
@Controller
@Scope("request")
public class LoginController extends BaseController {
 
    private static Logger logger = Logger.getLogger(LoginController.class);
 
    @Resource
    private MenuController menuController;
    @Resource
    private SysUserService sysUserService;
 
    private String loginAcct;
    private String loginPwd;
    private static Byte ischange = 0;
 
    public String login() {
        UsernamePasswordToken token = new UsernamePasswordToken(loginAcct, loginPwd);
        token.setRememberMe(true);
 
        Subject currentUser = this.getSubject();
        try {
            currentUser.login(token);
        } catch (UnknownAccountException e) {
            FacesUtils.warn("用户名不存在");
            return null;
        }  catch (ExcessiveAttemptsException e) {
            FacesUtils.warn("登陆失败,密码连续输入错误超过8次,锁定1分钟!");
            return null;
        } catch (Exception e) {
            logger.error("登陆失败", e);
        }
 
        if (currentUser.isAuthenticated()) {//登录成功进入主页
            SysUser user = this.sysUserService.getSysUserByAccount(loginAcct);
            currentUser.getSession(true).setAttribute(Constants.SESSION_USER, user);
 
            String PW_PATTERN = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*_.]).{8,}";
            if (!loginPwd.matches(PW_PATTERN)) {
                ischange = 1;
            }else {
                ischange = 0;
            }
 
            this.menuController.initPage();
            return Constants.PAGE_INDEX + Constants.REDIRECT;
        } else {
            FacesUtils.warn("用户名与密码不匹配");
        }
        return null;
    }
 
    public String logout() {
        this.getSubject().logout();
        return Constants.PAGE_LOGIN + Constants.REDIRECT;
    }
 
    public String getLoginAcct() {
        return loginAcct;
    }
 
    public void setLoginAcct(String loginAcct) {
        this.loginAcct = loginAcct;
    }
 
    public String getLoginPwd() {
        return loginPwd;
    }
 
    public void setLoginPwd(String loginPwd) {
        this.loginPwd = loginPwd;
    }
 
 
    public Byte getIschange() {
        return ischange;
    }
 
    public void setIschange(Byte ischange) {
        this.ischange = ischange;
    }
}