博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通用后台管理系统(8)-编写登入控制器
阅读量:5784 次
发布时间:2019-06-18

本文共 4793 字,大约阅读时间需要 15 分钟。

控制器

package com.sundablog.controller.backend.login;import java.io.IOException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.shiro.SecurityUtils;import org.apache.shiro.authc.AuthenticationException;import org.apache.shiro.authc.AuthenticationToken;import org.apache.shiro.authc.DisabledAccountException;import org.apache.shiro.authc.UsernamePasswordToken;import org.apache.shiro.session.Session;import org.apache.shiro.subject.Subject;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import com.sundablog.pojo.AdminUser;import com.sundablog.result.BaseResult;import com.sundablog.service.backend.system.upms.user.UserService;import com.sundablog.utlis.CaptchaUtil;import com.sundablog.utlis.RedisUtil;import cn.hutool.core.util.StrUtil;import cn.hutool.crypto.digest.DigestUtil;/** * 登录控制器 * @ClassName:  LoginController    * @Description:登录控制器   * @author: 哒哒  * @date:   2018年3月18日 下午12:45:41    *      * @Copyright: 2018 www.sundablog.com Inc. All rights reserved. */@Controllerpublic class LoginController {        @Autowired    private UserService userService;        /**     * 登入界面显示     * @Title: login        * @Description: TODO(这里用一句话描述这个方法的作用)        * @param: @return           * @return: String           * @throws     */    @RequestMapping(value= {"/","/login"})    public String login() {        return "/login/login";    }        /**     * 验证码        * @Title: code        * @Description: TODO(这里用一句话描述这个方法的作用)        * @param: @param request     * @param: @param response     * @param: @param session     * @param: @throws IOException           * @return: void           * @throws     */    @RequestMapping("/captcha")    public void code(HttpServletRequest request, HttpServletResponse response) throws IOException {        // 设置响应的类型格式为图片格式        response.setContentType("image/jpeg");        response.setHeader("Pragma", "no-cache");        response.setHeader("Cache-Control", "no-cache");        response.setDateHeader("Expires", 0);        // 自定义参数        CaptchaUtil code = new CaptchaUtil(156, 38, 4, 4);        request.getSession().setAttribute("validateCode", code.getCode());        code.write(response.getOutputStream());        System.err.println(request);        }        /**     * 登录     * @Title: loginClick        * @Description: TODO(这里用一句话描述这个方法的作用)        * @param: @param userName     * @param: @param password     * @param: @param verificationCode     * @param: @return     * @param: @throws DisabledAccountException           * @return: BaseResult           * @throws     */    @RequestMapping("/loginClick")    @ResponseBody    public BaseResult loginClick(String userName, String password, String verificationCode,HttpServletRequest request)            throws DisabledAccountException {        String captcha = (String)request.getSession().getAttribute("validateCode");        if (StrUtil.isEmpty(verificationCode)) {            return BaseResult.build(209, "验证码错误");        } else {            if (captcha.equals(verificationCode)) {                /**                 * 获得当前用户对象,状态为“未认证”                 */                Subject subject = SecurityUtils.getSubject();                AdminUser adminUser = userService.selectAdminUserByUserName(userName);                if (1 == adminUser.getLocked().intValue()) {                    return BaseResult.build(202, "账户以及被锁定");                }                AuthenticationToken token = new UsernamePasswordToken(userName,                        DigestUtil.md5Hex(password + adminUser.getSalt()));// 创建用户名密码令牌对象                                try {                    subject.login(token);                    return BaseResult.ok();                } catch (AuthenticationException e) {                    return BaseResult.build(203, "用户名密码错误");                }                            } else {                //验证码错误                return BaseResult.build(204, "验证码错误");            }        }    }                    /**     * 退出     * @Title: quit        * @Description: TODO(这里用一句话描述这个方法的作用)        * @param: @return           * @return: BaseResult           * @throws     */    @RequestMapping("/quit")    @ResponseBody    public BaseResult quit() {        Subject subject = SecurityUtils.getSubject();        try {            subject.logout();            return BaseResult.ok();        } catch (Exception e) {            return BaseResult.build(201, "退出失败");        }    }    }
posted on
2018-04-02 23:40 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/sundaboke/p/8698752.html

你可能感兴趣的文章
struts2中form提交到action中的中文参数乱码问题解决办法(包括取中文路径)
查看>>
25 个精美的手机网站模板
查看>>
C#反射实例应用--------获取程序集信息和通过类名创建类实例
查看>>
VC中实现文字竖排的简单方法
查看>>
会话标识未更新
查看>>
阿里架构师:程序员必须掌握的几项核心技术能力
查看>>
程序员常用的六大技术博客类
查看>>
Iceworks 2.8.0 发布,自定义你的 React 模板
查看>>
胖哥学SpringMVC:请求方式转换过滤器配置
查看>>
Kotlin 更加优雅的 Builder - 理解 with
查看>>
前端日拱一卒D6——字符编码与浏览器解析
查看>>
深入理解浏览器的缓存机制
查看>>
微软向Linux社区开放60000多项专利:对开源微软是认真的
查看>>
Hoshin Kanri在丰田的应用
查看>>
又拍云沈志华:如何打造一款安全的App
查看>>
克服大数据集群的挑战
查看>>
PostgreSQL并发控制(MVCC, 事务,事务隔离级别)
查看>>
12月19日一周一次【Python基础语法】
查看>>
DM***的第二阶段OSPF
查看>>
python socket编程
查看>>