`

shiro (五) spring结合 -- Realm

 
阅读更多

 

package com.miv.shiro.common;

 

import org.apache.shiro.authc.AuthenticationException;

import org.apache.shiro.authc.AuthenticationInfo;

import org.apache.shiro.authc.AuthenticationToken;

import org.apache.shiro.authc.LockedAccountException;

import org.apache.shiro.authc.SimpleAuthenticationInfo;

import org.apache.shiro.authc.UnknownAccountException;

import org.apache.shiro.authz.AuthorizationException;

import org.apache.shiro.authz.AuthorizationInfo;

import org.apache.shiro.authz.SimpleAuthorizationInfo;

import org.apache.shiro.realm.AuthorizingRealm;

import org.apache.shiro.subject.PrincipalCollection;

 

import com.miv.core.constant.DatabaseConstants;

import com.miv.entity.Role;

import com.miv.entity.User;

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

import com.miv.shiro.role.service.RolesService;

 

/**

 * shiro与工程接口类

 * 

 * @author 赵治宇

 * @version

 */

public class WebRealm extends AuthorizingRealm {

 

    private LoginService loginService;

 

    private RolesService rolesService;

 

    public WebRealm() {

        setName("WebRealm");

    }

 

    public void setLoginService(LoginService loginService) {

        this.loginService = loginService;

    }

 

    public void setRolesService(RolesService rolesService) {

        this.rolesService = rolesService;

    }

 

    /**

     * 授权方法

     * 

     * @return

     */

    @Override

    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) throws AuthorizationException {

        String userName = (String) principals.fromRealm(getName()).iterator().next();

        User user = new User();

        user.setLoginName(userName);

        try {

            user = loginService.findUserByUsername(user);

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

        /*

         * List<Roles> roleList = rolesService.getCurrentRoleList(user); if (user != null) {

         * 

         * for (Roles role : roleList) { info.addRole(role.getRoleName()); } }

         */

        Role role = rolesService.findRoleById(user);

        if (role == null) {

            throw new AuthorizationException();

        }

        info.addRole(role.getRoleCode());

        return info;

    }

 

    /**

     * 认证方法

     * 

     * @return

     */

    @Override

    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {

 

        MIVshiroToken token = (MIVshiroToken) authcToken;

        User user = new User();

        user.setLoginName(token.getUsername());

        user.setPassword(String.valueOf(token.getPassword()));

        Role role = new Role();

        role.setId(token.getROLE_CODE() + 0L);

        user.setRole(role);

        try {

            user = loginService.findUserByUsernameAndPassword(user);

        } catch (Exception e) {

            throw new AuthenticationException();

        }

        if (user != null) {

            boolean flag = token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_AGENCY)

                    || token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_CALL_CENTER)

                    || token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_ADMIN)

                    || token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_USER);

            if (user.getStatus() == DatabaseConstants.STATUS_2.intValue() && flag) {

                throw new LockedAccountException();

            } else {

                return new SimpleAuthenticationInfo(user.getLoginName(), user.getPassword(), getName());

            }

        } else {

            throw new UnknownAccountException();

        }

    }

}


分享到:
评论

相关推荐

    shiro常用jar包-1.2.2

    将Shiro集成到项目中,通常需要在配置文件(如`shiro.ini`或Java配置)中指定安全策略,包括 Realm(负责与应用程序数据源交互以获取用户信息和权限信息)的配置,以及其他的设置项。 8. **插件体系** Shiro的...

    shiro与spring web 项目集成.pdf

    - SecurityManager(安全管理器):Shiro框架的核心,负责管理所有的Subject、Realm、缓存等。 - Subject(主体):代表当前“用户”,这个用户不一定是一个具体的人,也可以是第三方服务、守护进程账户、时间驱动的...

    springcloud-shiro

    在IT行业中,Spring Cloud Shiro 是一个非常重要的组合,它结合了Spring Boot的便捷性和Shiro的安全管理框架,用于构建微服务环境中的权限控制。在这个项目中,我们看到"springcloud-shiro"是一个基于Spring Boot的...

    shiro-root-1.2.3-source-release zipa包 和相关jar包

    - **shiro-spring.jar**:Spring框架的集成,便于在Spring应用中使用Shiro。 - **log4j.jar, slf4j.jar**:日志处理库,Shiro依赖这些库进行日志输出。 了解和使用这些jar包,开发者可以根据项目需求选择合适的模块...

    spring-shiro-training-master.zip_guide8go_shiro_spring_spring 权限

    本教程将深入探讨如何结合Spring框架与Apache Shiro库,构建一套强大的权限管理系统。Spring作为Java领域的主流框架,提供了丰富的功能和灵活的扩展性;而Shiro则是一个轻量级的安全框架,专注于身份验证、授权和...

    springboot-shiro认证系统框架--成型框架

    - 自定义Realm: Realm是Shiro与应用数据源的接口,通常需要自定义 Realm 类,实现用户的认证和授权逻辑,连接到数据库或其他数据存储。 - 过滤器链:Shiro的Filter Chain定义了请求的处理流程,如登录、权限检查...

    shiro-realm案例

    在`shiro.web`这个项目中,我们可以看到Web应用的相关配置,可能包括了Spring MVC的Controller、Service和DAO,以及与Shiro相关的配置文件,如`shiro.ini`或`shiro.xml`。 在配置文件中,我们需要将自定义的Realm...

    springboot-shiro

    Subject代表了系统中的用户,而Realm则是Shiro获取身份验证和授权信息的接口,通常需要对接数据库或其它数据源。通过自定义Realm,我们可以将用户的登录信息、角色和权限存储在数据库中。 在实现细粒度动态权限管理...

    shiro-root-1.3.2-source-release

    7. **集成**:Shiro 可以轻松地与Spring、Struts、JSF等其他框架集成,以提供全面的安全解决方案。 在 "shiro-root-1.3.2-source-release" 源码包中,你可以找到以下内容: - `src/main/java`: 源代码,包括各个...

    shiro整合spring+springmvcjar包

    - 使用Spring的Bean管理,我们可以把Shiro的相关组件(如 Realm、SecurityManager、Filter)配置为Spring Bean,方便管理和依赖注入。 - 在Spring配置文件中定义Shiro的过滤器链,如`FormAuthenticationFilter`、`...

    shiro-root-1.2.2-source-release.zip

    Shiro 不像Spring Security那样复杂,它提供了一种直观、简单的API来处理常见的安全需求,如用户身份验证、授权、会话管理和加密。 2. **Shiro的核心组件** - **Authentication(认证)**:验证用户身份,确保登录...

    shiro+spring的Demo

    在Java Web开发领域,Apache Shiro和Spring框架的结合使用已经成为一种常见的安全解决方案。本示例项目"shiro+Spring的Demo"旨在展示如何将这两个强大的工具集整合,以实现高效、灵活的身份认证和授权功能。项目基于...

    Apache Shiro 集成-spring

    在集成Spring时,Shiro 可以更好地融入到Spring的IoC和AOP体系中,实现更灵活的安全控制。 首先,我们来理解一下Shiro的核心概念: 1. 认证:验证用户身份,通常涉及用户名和密码的匹配。 2. 授权:确定用户是否有...

    shiro和spring整合

    Apache Shiro 和 Spring 的整合是Java Web开发中常见的安全框架集成方式,这使得开发者能够利用Shiro的强大安全功能,同时享受Spring的灵活架构优势。在本文中,我们将深入探讨Shiro与Spring整合的关键知识点,包括...

    spring mvc-redis-shiro

    在IT行业中,Spring MVC、Redis和Shiro是三个非常重要的技术组件,它们分别在Web开发、数据缓存和安全管理方面发挥着关键作用。本项目"spring mvc-redis-shiro"是一个整合了这三个技术的实例,旨在提供一个清晰易懂...

    spring-shiro-training项目解读

    在实际应用中,Spring和Shiro的结合使用能提供强大的安全防护,例如,你可以用Shiro进行用户登录验证,而Spring Security负责更复杂的访问控制策略。同时,Spring的AOP可以用来进行全局的安全处理,如方法级别的权限...

    ShiroSpring

    Apache Shiro是一个强大的...总的来说,"ShiroSpring"项目展示了如何将Shiro的安全功能与Spring框架相结合,以创建一个安全、易于维护的企业级应用。通过理解上述知识点,开发者能够更好地理解和实现类似的集成方案。

    Springboot + shiro权限管理shiro-master.zip

    《Spring Boot结合Shiro实现权限管理详解》 在现代企业级应用开发中,权限管理是一项不可或缺的功能,它确保了系统安全性和用户数据的隐私。Spring Boot作为Java领域的一款热门微服务框架,以其简洁的配置和快速...

    单点登录sso-shiro-cas-maven

    spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库生成语句,采用的...

    shiro-all-1.2.3.jar

    3. 编写Shiro配置类:在Spring MVC应用中,创建一个配置类,通过@Bean注解声明Shiro的相关组件,如SecurityManager、Realm等。 4. 绑定Filter:在Spring MVC的web.xml或Spring Boot的配置中,设置Shiro Filter,并...

Global site tag (gtag.js) - Google Analytics