`

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();

        }

    }

}


分享到:
评论

相关推荐

    单点登录sso-shiro-cas-maven

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

    简单配置 shiro + spring +springMVC+hibernate简单框架

    &lt;bean id="authorizingRealm" class="com.mjm.core.interceptor.ShiroRealm"&gt; 2.Shiro Filter 设置拦截的内容和登录页面和成功、失败页面 3.配置securityManager &lt;bean id="securityManager" class="org.apache....

    Shiro最新全套在线教程(1.74G)

    01.权限管理概述.avi ...20.spring集成-shiro配置.avi 21.spring集成-登录操作.avi 22.spring集成-静态注解授权.avi 23.spring集成-静态注解授权_补充.avi 24.spring集成-权限-角色-用户关系分析.a

    spring-boot-shiro:Apache Shiro与Spring Boot的集成

    Apache Shiro与Spring Boot集成 GitHub: : 用法 首先安装到本地仓库。 双向v2.0下为2.0.0版本,主要将Spring Boot升级到2.0.4.RELEASE,Shiro升级到1.4.0 mvn clean install pom.xml &lt; groupId&gt;...

    Shiro Realm 权限的验证流程和缓存机制.docx

    通过查看源码,Shiro的Spring Boot自动配置是至少一个通过策略,即有一个权限类通过就判定有权限并通过。 自动配置类: org.apache.shiro.spring.config.web.autoconfigure.ShiroWebAutoConfiguration @Bean @...

    shiro入门学习demo源码

    &lt;bean id="myShiroRealm" class="com.z.shiro.realm.ShiroRealm"&gt; &lt;property name="cacheManager" ref="cacheManager" /&gt; &lt;/bean&gt; &lt;!-- Shiro Filter --&gt; &lt;bean id="shiroFilter" class="org.apache...

    SpringShiro分布式缓存版

    class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"&gt; &lt;!-- end --&gt; --修改了过滤链 &lt;!-- 过滤链定义 --&gt; //简单的讲就是把需要特别处理的路径写到前面,越特殊写...

    spring整合shiro

    bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"&gt; 02 03 &lt;!-- override these for application-specific URLs if you like:--&gt; 04 &lt;!-- ...

    shrio-with-jwt-spring-boot-starter:spring-boot环境下基于JWT Token的无状态shiro权限验证框架

    但对于普通项目来说,Shiro 的设计理念因为追求灵活性,一些概念如 Realm,Subject 的抽象级别都比较高,显得比较复杂。如果没有对框架细节进行深入了解的话,很难理解其中的准确含义。要将其应用于实际项目,还需要...

    springMVC+mybatis+shiro+redis 项目整合demo

    springMVC+mybatis+shiro+redis 项目整合demo。

    springboot集成jwt和shiro实现前后端分离权限demo2

    springboot集成jwt和shiro实现前后端分离权限demo2 添加realm中异常处理

    shiro注解版

    class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"&gt; &lt;!-- end --&gt; --修改了过滤链 &lt;!-- 过滤链定义 --&gt; //简单的讲就是把需要特别处理的路径写到前面,越特殊写...

    尚硅谷Shiro视频教程

    尚硅谷_Shiro_集成 Spring · 04.尚硅谷_Shiro_工作流程(1) · 05.尚硅谷_Shiro_DelegatingFilterProxy · 06. 尚硅谷_Shiro_权限 URL 配置细节 · 07. 尚硅谷_Shiro_认证思路分析 · 08.尚硅谷_Shiro_实现认证...

    吴天雄--shiro个人总结笔记.doc

    shiro标签,第六讲 自定义Realm(加入整合spring和MyBatis), 第七讲 加密(加密算法、加密过程、加密实现代码),第八讲 记住我,第九讲 缓存管理(代码实现),第十讲 会话管理(session的监听和检测、环境配置)...

    Shiro入门框架

    使用了Spring MVC,mybaits等技术.. 数据库设计 : User : name--password Role : id--userid--roleName Function : id--userid--url tinys普通用户只能访问index.jsp admin用户通过添加了admin的permission,所以...

    service-shiro.zip

    1.环境搭建(主要是在springcloud基础上添加shiro包) 2.完成核心代码编写  2.0 shiro配置java类(  主要配置 内容  安全管理器 SecurityManager;  过滤器工厂 ShiroFilterFactoryBean(设置...

    shirospring 整合.rar

    shiro 登录管理和权限管理:将用户在页面输入的账号密码通过控制器到自定义realm里进行登录认证,如果查不到或者密码错误则抛出异常,控制器抓取异常反馈到登录页面,信息正确则跳转到菜单页面,通过点击菜单跳转到...

    springboot:spring boot+shiro+redis研究性项目+图形验证码

    Spring boot druid: log4j2 Shiro 需要引入的依赖 &lt;groupId&gt;org.apache.shiro ...创建ShiroRealm类并继承AuthorizingRealm,然后实现AuthorizationInfo权限管理,AuthenticationInfo登录管理 登录

    Spring配置shiro时自定义Realm中属性无法使用注解注入的解决办法

    今天小编就为大家分享一篇关于Spring配置shiro时自定义Realm中属性无法使用注解注入的解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    基于SpringBoot+Shiro+Redis+Jwt+Thymeleaf+MyBatis 开发的后台用户、角色+源代码+文档

    Apache Shiro和Spring-Security为权限授权层,redis进行缓存。 Geek-Framework主要定位于微应用的开发,已内置后台系统的基础功能,用户管理、角色管理、权限管理、会员管理、日志管理等;前台已经实现用户登录,...

Global site tag (gtag.js) - Google Analytics