`

shiro (三) spring结合 LoginController

 
阅读更多

 

package com.miv.shiro.login.controller;

 

import java.util.Map;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

import org.apache.shiro.SecurityUtils;

import org.apache.shiro.subject.Subject;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.servlet.mvc.support.RedirectAttributes;

 

import com.miv.agencyportal.menu.home.service.AgencyHomeService;

import com.miv.common.constant.AgencyModules;

import com.miv.common.constant.CallCenterModules;

import com.miv.common.constant.UserModules;

import com.miv.common.utils.APSysLogger;

import com.miv.common.utils.CPSysLogger;

import com.miv.common.utils.UPSysLogger;

import com.miv.core.constant.DatabaseConstants;

import com.miv.core.controller.WebBaseController;

import com.miv.core.json.JsonResponse;

import com.miv.core.utils.MessageUtils;

import com.miv.entity.User;

import com.miv.form.LoginView;

import com.miv.shiro.common.ShiroEncryption;

import com.miv.shiro.login.service.LoginService;

 

@RequestMapping("/login")

@Controller

public class LoginController extends WebBaseController {

 

    final Logger logger = LoggerFactory.getLogger(LoginController.class);

 

    @Autowired

    private LoginService loginService;

    @Autowired

    private AgencyHomeService agencyHomeService;

    @Autowired

    private APSysLogger apSysLogger;

    @Autowired

    private CPSysLogger cpSysLogger;

    @Autowired

    private UPSysLogger upSysLogger;

 

    /**

     * 返回地址

     */

    public String getLoaction(Integer ROLE, String role_code) throws Exception {

        Subject subject = SecurityUtils.getSubject();

        if (subject.getPrincipal() != null) {// 记住我功能

            String loginName = subject.getPrincipal().toString();

            boolean flag = loginService.checkDisableStatus(loginName) || loginService.checkPassword(loginName);// 密码修改返回true,否则false;

            if (flag) {// 修改密码后

                return ShiroEncryption.decryptionURL(ROLE, ShiroEncryption.FAILURE);

            } else if (subject.hasRole(role_code)) {// 普通用户

                if (ROLE.equals(DatabaseConstants.ROLE_CODE_AGENCY)) {

                    apSysLogger.log(MessageUtils.getMessage("log_ap_login"), getSessionSubject().getId(),

                            AgencyModules.Login.loginManage,

                            MessageUtils.getMessage("log_login_data", new Object[] { loginName, role_code, true }));

                }

                if (ROLE.equals(DatabaseConstants.ROLE_CODE_CALL_CENTER)) {

                    cpSysLogger.log(MessageUtils.getMessage("log_cp_login"), getSessionSubject().getId(),

                            CallCenterModules.Login.loginManage,

                            MessageUtils.getMessage("log_login_data", new Object[] { loginName, role_code, true }));

                }

                if (ROLE.equals(DatabaseConstants.ROLE_CODE_USER)) {

                    upSysLogger.log(MessageUtils.getMessage("log_up_login"), getSessionSubject().getId(),

                            UserModules.Login.loginManage,

                            MessageUtils.getMessage("log_login_data", new Object[] { loginName, role_code, true }));

                }

                return ShiroEncryption.decryptionURL(ROLE, ShiroEncryption.SUCCESS);

            } else {// 其他

                return ShiroEncryption.decryptionURL(ROLE, ShiroEncryption.FAILURE);

            }

        } else {// 未记住我

            return ShiroEncryption.decryptionURL(ROLE, ShiroEncryption.FAILURE);

        }

    }

 

    /**

     * 判定权限不足时跳转对应登录页

     * 

     * @param role_code

     * @return

     */

    @RequestMapping("/init")

    public String init(HttpServletRequest request) throws Exception {

        String[] role_code = (String[]) SecurityUtils.getSubject().getSession().getAttribute("role_code");

        if (role_code == null || role_code[0].trim().equals("")) {// 非法进来的就普通用户

            request.setAttribute("_cmd", ShiroEncryption.encryption(DatabaseConstants.ROLE_CODE_USER));

            return ShiroEncryption.decryptionURL(DatabaseConstants.ROLE_CODE_USER, ShiroEncryption.FAILURE);

        }

        Integer ROLE_CODE = ShiroEncryption.decryption(role_code[0]);

        request.setAttribute("_cmd", ShiroEncryption.encryption(ROLE_CODE));

 

        return ShiroEncryption.decryptionURL(ROLE_CODE, ShiroEncryption.FAILURE);

    }

 

    /**

     * 登录处理普通用户登录地址

     * 

     * @param ModelMap

     * @param HttpServletRequest

     * @return String

     * @throws Exception

     */

    @RequestMapping("/user")

    public String user(ModelMap map, HttpServletRequest request) throws Exception {

        request.setAttribute("_cmd", ShiroEncryption.encryption(DatabaseConstants.ROLE_CODE_USER));

        return this.getLoaction(DatabaseConstants.ROLE_CODE_USER, "user");

    }

 

    /**

     * 登录处理经销商登录地址

     * 

     * @param ModelMap

     * @param HttpServletRequest

     * @return String

     * @throws Exception

     */

    @RequestMapping("/agency")

    public String agency(ModelMap map, HttpServletRequest request, HttpServletResponse response, HttpSession session)

            throws Exception {

        request.setAttribute("_cmd", ShiroEncryption.encryption(DatabaseConstants.ROLE_CODE_AGENCY));

        String returnHome = this.getLoaction(DatabaseConstants.ROLE_CODE_AGENCY, "agency");

        String successHome = ShiroEncryption.decryptionURL(DatabaseConstants.ROLE_CODE_AGENCY, ShiroEncryption.SUCCESS);

        if (returnHome.equalsIgnoreCase(successHome)) {

            Map<String, String> urlM = agencyHomeService.findPlots(super.getSessionSubject(), response, session);

            request.setAttribute("urlM", urlM);

        }

        return returnHome;

    }

 

    /**

     * 登录处理客户中心登录地址

     * 

     * @param ModelMap

     * @param HttpServletRequest

     * @return String

     * @throws Exception

     */

    @RequestMapping("/call")

    public String call(ModelMap map, HttpServletRequest request) throws Exception {

        request.setAttribute("_cmd", ShiroEncryption.encryption(DatabaseConstants.ROLE_CODE_CALL_CENTER));

        return this.getLoaction(DatabaseConstants.ROLE_CODE_CALL_CENTER, "callCenter");

    }

 

    /**

     * 登录处理mapping

     * 

     * @param Model

     * @param BindingResult

     * @return String

     * @throws Exception

     */

    @ResponseBody

    @RequestMapping(value = "/index")

    public JsonResponse login(LoginView user, String _cmd, HttpServletRequest request) throws Exception {

        JsonResponse jsonResponse = null;

        user.setLoginName(user.getLoginName().trim());// 去除前后空格

        boolean remember = false;

        if (user.getRememberMe() != null && (!user.getRememberMe().trim().equals(""))) {

            remember = true;

        } else {

            remember = false;

        }

        user.set_cmd(_cmd);

        jsonResponse = loginService.findLogin(remember, user);

        if (jsonResponse.isSuccess()) {

            Integer ROLE_CODE = ShiroEncryption.decryption(user.get_cmd());

            if (ROLE_CODE.equals(DatabaseConstants.ROLE_CODE_AGENCY)) {

                apSysLogger.log(MessageUtils.getMessage("log_ap_login"), getSessionSubject().getId(),

                        AgencyModules.Login.loginManage,

                        MessageUtils.getMessage("log_login_data", new Object[] { user.getLoginName(), _cmd, false }));

            }

            if (ROLE_CODE.equals(DatabaseConstants.ROLE_CODE_CALL_CENTER)) {

                cpSysLogger.log(MessageUtils.getMessage("log_cp_login"), getSessionSubject().getId(),

                        CallCenterModules.Login.loginManage,

                        MessageUtils.getMessage("log_login_data", new Object[] { user.getLoginName(), _cmd, false }));

            }

            if (ROLE_CODE.equals(DatabaseConstants.ROLE_CODE_USER)) {

                upSysLogger.log(MessageUtils.getMessage("log_up_login"), getSessionSubject().getId(),

                        UserModules.Login.loginManage,

                        MessageUtils.getMessage("log_login_data", new Object[] { user.getLoginName(), _cmd, false }));

            }

 

        }

        return jsonResponse;

    }

 

    /**

     * 登出处理

     * 

     * @param ModelMap

     * @param BindingResult

     * @return

     * @throws Exception

     */

    @RequestMapping("/logout/{roleCode}")

    public String logout(@PathVariable String roleCode, ModelMap map, RedirectAttributes redirectAttributes,

            HttpServletRequest request) throws Exception {

        Integer ROLE_CODE = ShiroEncryption.decryption(roleCode);

        request.setAttribute("_cmd", ShiroEncryption.encryption(ROLE_CODE));

        User user = null;

        try {

            user = super.getSessionSubject();

        } catch (Exception e) {

            return ShiroEncryption.decryptionURL(ROLE_CODE, ShiroEncryption.FAILURE);

        }

 

        if (ROLE_CODE.equals(DatabaseConstants.ROLE_CODE_AGENCY)) {

            apSysLogger.log(MessageUtils.getMessage("log_ap_loginout"), getSessionSubject().getId(),

                    AgencyModules.Login.loginManage,

                    MessageUtils.getMessage("log_loginout_data", new Object[] { user.getLoginName() }));

        }

        if (ROLE_CODE.equals(DatabaseConstants.ROLE_CODE_CALL_CENTER)) {

            cpSysLogger.log(MessageUtils.getMessage("log_cp_loginout"), getSessionSubject().getId(),

                    CallCenterModules.Login.loginManage,

                    MessageUtils.getMessage("log_loginout_data", new Object[] { user.getLoginName() }));

        }

        if (ROLE_CODE.equals(DatabaseConstants.ROLE_CODE_USER)) {

            upSysLogger.log(MessageUtils.getMessage("log_up_loginout"), getSessionSubject().getId(),

                    UserModules.Login.loginManage,

                    MessageUtils.getMessage("log_loginout_data", new Object[] { user.getLoginName() }));

        }

        try {

            SecurityUtils.getSubject().logout();

        } catch (Exception e) {

            logger.warn("Session失效注销");

        }

 

        return ShiroEncryption.decryptionURL(ROLE_CODE, ShiroEncryption.FAILURE);

    }

 

    @RequestMapping("/home")

    public String loginHome(HttpServletRequest request) throws Exception {

        Subject subject = SecurityUtils.getSubject();

        String url = ShiroEncryption.decryptionURL(DatabaseConstants.ROLE_CODE_USER, ShiroEncryption.FAILURE);

        if (subject.isAuthenticated()) {

            User user = loginService.findAllByLoginName(subject.getPrincipal().toString());

            url = "login/login_goto";

            request.setAttribute("url",

                    ShiroEncryption.decryptionURL(Integer.valueOf(user.getRole().getId().toString())));

        }

        request.setAttribute("_cmd", ShiroEncryption.encryption(DatabaseConstants.ROLE_CODE_USER));

        return url;

    }

 

    /**** 找回密码 *****/

    /**

     * 提交申请转向JSP

     * 

     * @return

     */

    @RequestMapping("/applyPasswordJsp")

    public String applyPassword() {

        return "login/apply_password";

    }

 

    /**

     * 获得申请key,并发送邮件

     * 

     * @param loginName

     * @param email

     * @return

     * @throws Exception

     */

    @ResponseBody

    @RequestMapping("/applyPassword")

    public JsonResponse applyPassword(String loginName, String email) throws Exception {

        JsonResponse jsonResponse = null;

        boolean flag = loginService.insertApplyPassword(loginName, email);

        jsonResponse = ajaxSuccess(flag);

        return jsonResponse;

    }

 

    /**

     * 登录找回密码JSP

     * 

     * @param request

     * @param applyKey

     * @return

     */

    @RequestMapping("/retrievePasswordJsp/{applyKey}")

    public String retrievePassword(HttpServletRequest request, @PathVariable String applyKey) {

        String url = "";

        boolean refresh = request.getSession().getAttribute("applyPassword") != null

                && ("REFRESH").equals(request.getSession().getAttribute("applyPassword").toString());

        if (refresh) {

            url = "login/retrieve_password";

            return url;

        }

        boolean flag = loginService.updateApplyPassword(applyKey);

 

        if (!flag) {

            request.getSession().setAttribute("applyPassword", "NO");

            url = "login/apply_key_error";

        } else {

            request.getSession().setAttribute("applyPassword", "REFRESH");

            url = "login/retrieve_password";

        }

        return url;

    }

 

    /**

     * 找回密码--新密码更改操作

     * 

     * @param applyKey

     * @return

     */

    @ResponseBody

    @RequestMapping("/retrievePassword")

    public JsonResponse retrievePassword(String applyKey, String newPassword, String confirmPassword) {

        JsonResponse jsonResponse = null;

        if (!newPassword.equals(confirmPassword)) {

            jsonResponse = ajaxFailure("确认密码与新密码不一致");

            return jsonResponse;

        }

        boolean flag = loginService.updateApplyPassword(applyKey, newPassword);

        if (flag) {

            jsonResponse = ajaxSuccess();

            User user = loginService.findUserByApplyKey(applyKey);

            upSysLogger.log(MessageUtils.getMessage("log_up_changePassword"), user.getId(),

                    UserModules.MyInfo.CHANGE_PASSWORD,

                    MessageUtils.getMessage("log_up_changePassword_data", new Object[] { user.getLoginName() }));

        } else {

            jsonResponse = ajaxFailure("修改失败");

        }

        return jsonResponse;

    }

 

    /**

     * 此为测试JSP

     * */

    @RequestMapping("/test/{jsp}")

    public String test(@PathVariable String jsp, ModelMap map, RedirectAttributes redirectAttributes,

            HttpServletRequest request) throws Exception {

        // System.out.println(jsp);

        return "sections/" + jsp;

    }

}


分享到:
评论

相关推荐

    spring boot与shiro集成demo

    **Spring Boot与Shiro集成详解** 在Web应用开发中,权限管理和用户认证是不可或缺的部分。Spring Boot以其便捷的集成性和强大的功能,已经成为Java领域最受欢迎的框架之一。而Apache Shiro则是一个轻量级的安全框架...

    Spring Boot与Shiro实现权限管理

    总的来说,Spring Boot结合Shiro能提供一套简单而强大的权限管理体系。通过合理的配置和定制化开发,可以满足不同规模项目的需求。这个压缩包文件"springbootshiro"可能包含了实现这一功能的完整代码示例,可以帮助...

    39.3 Spring Boot Shiro权限管理【从零开始学Spring Boot】

    总的来说,通过Spring Boot与Shiro的结合,我们可以方便地实现权限管理功能,包括用户认证、角色授权、URL过滤等。这只是一个基础的示例,实际应用中,Shiro还可以配合缓存、Session管理、密码加密策略等,提供更...

    SSM整合shiro实现角色权限

    SSM框架是由Spring、Spring MVC和MyBatis三个组件组成的,而Apache Shiro则是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能。接下来,我们将深入探讨如何将Shiro与SSM框架整合,以实现细致的...

    Spring Boot整合Shiro搭建权限管理系统教学提纲.docx

    ### Spring Boot 整合 Shiro 搭建权限管理系统知识点详解 #### 一、Spring Boot 入门 在本部分,我们首先了解如何基于 Spring Boot 构建项目的基础框架。 1. **新建 Maven 工程** - 使用 IntelliJ IDEA 或 ...

    shiro_springboot.zip

    三、配置 Shiro 1. 创建 `ShiroConfig` 类,配置 Realm: ```java @Configuration public class ShiroConfig { @Autowired private MyRealm myRealm; @Bean public DefaultWebSecurityManager ...

    Shiro教程-孙开涛

    - **登录/退出**:这是Shiro中最基础的操作之一,通过配置Shiro的`LoginController`等类来实现用户登录和注销的过程。 - **身份认证流程**: - **Realm**:Realm是Shiro的核心概念之一,它是Shiro与应用安全数据的...

    2018年SpringBoot与Shiro整合-权限管理实战视频

    #### 三、Spring Boot与Shiro整合概述 Spring Boot与Apache Shiro结合使用可以实现强大的权限管理和用户认证功能,适用于各种类型的Web应用程序。下面将详细介绍如何在Spring Boot项目中集成Shiro,并实现权限管理...

    Shiro-springBoot-mysql集成

    在本文中,我们将深入探讨如何将Apache Shiro与Spring Boot和MySQL数据库集成,以实现一个高效、安全的权限管理系统。Apache Shiro是一个强大且易用的Java安全框架,提供了身份验证、授权、会话管理和加密等功能。...

    一个简单的springboot整合shiro demo,实现了登录页面拦截,账户密码提交正确放行

    总的来说,SpringBoot与Shiro的结合使得安全控制变得简单而灵活,能够快速适应各种应用场景。通过对"shirodemo"的深入理解和实践,开发者可以更好地掌握Shiro在SpringBoot中的应用,提升开发效率和系统的安全性。

    spring-boot-shiro

    当Spring Boot与Shiro结合时,可以构建出高效且安全的Web应用。本文将深入探讨如何在Spring Boot项目中集成Shiro,以及相关的核心概念和实践技巧。 1. **Shiro基础** Shiro的核心组件包括Subject、Realms、Caching...

    Spring boot整合shiro+jwt实现前后端分离

    三、Spring Boot 整合 Shiro 和 JWT 为了实现前后端分离,我们需要在 Spring Boot 应用程序中整合 Shiro 和 JWT。首先,需要在 pom.xml 文件中添加 Shiro 和 JWT 的依赖项: ```xml &lt;!-- Shiro 依赖 --&gt; ...

    spring-shiro:springboot+shiro简单整合

    在IT行业中,Spring Boot和Apache Shiro是两个非常重要的组件,它们分别负责应用程序的快速开发和权限安全管理。本文将深入探讨如何将它们整合在一起,构建一个高效、安全的后端系统。 Spring Boot是由Pivotal团队...

    java shiro权限认证demo

    - **配置Shiro**:在Spring或者其它依赖注入框架中配置Shiro,包括设置Realm和安全管理器。 - **创建 Realm**:自定义 Realm 类,实现`AuthenticationInfo`和`AuthorizationInfo`接口,获取和验证用户身份及权限...

    spring+springmvc+mybatis

    这三种技术的结合,使得开发者能够高效地实现业务逻辑,同时保持代码的清晰和可维护性。下面我们将详细探讨这三个框架的核心概念及其在构建登录系统中的应用。 1. **Spring框架**:Spring是Java平台上的一个全功能...

    springboot+shior 完整代码

    它旨在简化Spring应用程序的初始搭建以及开发过程,而Apache Shiro则是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地与Spring Boot结合使用。 首先,SpringBoot的核心特性...

    组织概述1

    综上所述,这个组织的项目采用Spring MVC架构,结合MyBatis作为持久层框架,Shiro处理权限控制,使用JWT进行身份验证,并且提供了丰富的工具类来优化开发流程。整个系统覆盖了教育管理系统的各个方面,从用户登录、...

    springMVC简单登陆例子

    - 可以引入Apache Shiro或Spring Security来提供更全面的安全管理,包括权限控制、会话管理等。 7. **错误和异常处理** - 设置全局异常处理,捕获并适当地处理可能出现的异常,如`@ExceptionHandler`注解或`@...

    SpringBootLogin

    在安全方面,Spring Security或者Apache Shiro可以提供更高级的认证和授权功能,但本项目可能仅基于基本的Java代码实现。在实际生产环境中,使用这些安全框架可以更好地保护应用程序,防止未授权访问。 总的来说,...

    ShrioExample:构建一个 Shrio 应用程序

    Shiro的三大核心组件是认证(Authentication)、授权(Authorization)和会话管理(Session Management)。认证是验证用户身份的过程,授权则是确定用户是否有权限执行特定操作,而会话管理则涉及到用户状态的维护。...

Global site tag (gtag.js) - Google Analytics