`

apache shiro+spring简单集成

    博客分类:
  • java
阅读更多
1、apache shiro与spring集成
     (1)、   需要导入shiro-all.jar包;在web.xml中添加shiro过滤器:
     <filter>
        <filter-name>shiroFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <init-param>
             <param-name>targetFilterLifecycle</param-name>
             <param-value>true</param-value>
        </init-param>
   </filter>
     <filter-mapping>
        <filter-name>shiroFilter</filter-name>
        <url-pattern>/*</url-pattern>
   </filter-mapping>
     (2)、在spring配置文件中注入shiro相关类库:
     <!--自定义myRealm 继承自AuthorizingRealm 登录时与数据交互 -->
     <bean id="myRealm" class="com.easyoa.shiro.MyRealm" ></bean>

     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
          <property name="securityManager" ref="securityManager" />
          <property name="loginUrl" value="/login.jsp" />
          <property name="successUrl" value="/index.jsp" />
          <property name="unauthorizedUrl" value="/login.jsp" />
          <property name="filterChainDefinitions">
               <value>
                    /index.jsp = anon
                    /login.jsp = authc
                    /course/** = authc, roles[admin]
               </value>
          </property>
     </bean>
      <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
     <!--设置自定义realm-->
          <property name="realm" ref="myRealm" />
     </bean>
     <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
      <bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager" />
    (3)、登录系统时将页面传入的用户名和密码封装到token中:
        Subject currentUser= SecurityUtil.getSubject();获取当前活动用户信息;
        if(!currentUser.isAuthenticated()){
            当前活动用户没有认证时,执行认证操作;首先将前台页面传入的username、password封装到token中;绝大部分使用UsernamePasswordToken;
            UsernamePasswordToken token = new UsernamePasswordToken(username,password);
            如果有记住我的功能,则从页面获取rememberMe,如果选择记住我则为true,否则为false;
            token.setRememberMe(true/false);
            currentUser.login(token);  调用login方法将token传入shiro管理库中进行认证、授权等操作;
        }
    (4)、自定义realm类,该类需要继承AuthorizingRealm,并重写认证、授权方法:
@Service
    public class MyRealm extends AuthorizingRealm{
     public MyRealm() {
         super();
         //设置认证token的实现类,该处使用UsernamepasswordTken,也可自定义token,如果自定义token则需继承AuthenticationToken;
             setAuthenticationTokenClass(UsernamePasswordToken.class);
         //设置加密算法
         /**
          * 前台传入的明文与数据库中的加密数据进行比较,
          * new Digest()为自定义加密类,集成simpleCredentialsMatcher类,并重写doCredentialsMatch方法
          */
         setCredentialsMatcher(new Digest());
       
    }
    //授权
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
      String loginName = (String) principalCollection.fromRealm(getName()).iterator().next();
         Users user = usersService.getUserByName(loginName);//从数据库获取用户信息
         if (null == user) {
              return null;
         } else {
              SimpleAuthorizationInfo result = new SimpleAuthorizationInfo();
             result封装用户权限,
            result.addRole(roleName);  封装角色名
            result.addStringPermission(permissionName); 封装权限字符串
            result.addObjectPermission(Permission); 封装shiro的权限对象
              return result;
         }
    }

/** * 更新用户授权信息缓存. */
public void clearCachedAuthorizationInfo(String principal) {
SimplePrincipalCollection principals = new SimplePrincipalCollection(
principal, getName());
clearCachedAuthorizationInfo(principals);
}

    //认证
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
         UsernamePasswordToken upToken = (UsernamePasswordToken) token;
        从数据库中获取用户信息
         Users user = usersService.getUserByName(upToken.getUsername());
         if (user != null) {
            将从数据库中查询的用户名和密码封装到authenticationInfo对象中;shiro自动根据加密规则将前台的密码加密与之对比;
              return new SimpleAuthenticationInfo(user.getUsername(), user.getPwdhash(), getName());
         }
         return null;
    }
}

(5)、自定义加密类需要继承SimpleCredentialsMather,并重写doCredentialsMatch方法;
@Override
public boolean doCredentialsMatch(AuthenticationToken token,
AuthenticationInfo info) {
//对前台传入的明文数据加密,根据自定义加密规则加密,
Object tokencredential = this.digestObject(toBytes(token.getCredentials()), "SHA");
//从数据库获取的加密数据
Object accunt=this.getCredentials(info);
//返回对比结果
return equals(accunt,tokencredential);
}
分享到:
评论

相关推荐

    Spring Boot+Maven+Spring Data JPA+apache Shiro+Easyui实现通用用户权限管理系统

    本项目基于"Spring Boot+Maven+Spring Data JPA+apache Shiro+Easyui",这些技术栈的选择旨在简化开发过程,提供强大的功能,并确保系统的安全性和用户体验。 1. **Spring Boot**: Spring Boot是Spring框架的简化版...

    Spring Boot+Apache Shiro+Spring MVC+MyBatis+Quartz+Druid DEMO

    这是一个基于Spring Boot、Apache Shiro、Spring MVC、MyBatis、Quartz和Druid的数据源管理框架的示例项目,名为"renren-security"。这个DEMO提供了完整的权限管理和任务调度解决方案,下面是这些技术栈的核心知识点...

    shiro+spring+data+session+redis实现单点登录

    本案例聚焦于使用Apache Shiro、Spring、Spring Data以及Redis来实现单点登录功能,下面将详细解释这些组件以及它们如何协同工作。 **Apache Shiro** Apache Shiro是一款轻量级的安全框架,提供了认证、授权、会话...

    shiro+spring mvc集成的实例源码

    Apache Shiro 和 Spring MVC 是两个在 Java Web 开发中广泛使用的框架。Shiro 主要负责应用程序的安全管理,如身份认证、授权(权限控制)、会话管理和加密等,而 Spring MVC 则是 Spring 框架的一部分,用于构建 ...

    shiro+spring的Demo

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

    springboot+shiro+cas+redis+mybatis+thymeleaf 集成开发框架

    由于项目需要从网上搜集的相关的集成框架,很多都是部分集成,一直没有找到整个流程全部集成好的,所以将集成好的框架分享出来供大家学习。 主要实现SSO、后台RBAC角色认证管理。 下载后需要自行修改配置,项目包内...

    Shiro+Spring Security学习文档

    在IT安全领域,Apache Shiro和Spring Security是两个非常重要的框架,它们主要用于应用程序的安全管理,包括身份验证、授权、会话管理和加密等。本学习文档集合了这两个框架的相关知识,旨在帮助开发者深入理解和...

    shiro+spring集成

    Apache Shiro 和 Spring 的集成是企业级 Java 应用中常见的安全框架组合,它们共同为应用程序提供用户认证、授权和会话管理等功能。Shiro 是一个轻量级的安全框架,而 Spring 则是一个全面的后端开发框架。下面将...

    springmvc+shiro+spring+hibernate+redis缓存管理示例

    4. **Shiro**:Apache Shiro是一个强大且易用的Java安全框架,负责处理认证、授权、会话管理和加密等功能。在本项目中,Shiro被用来管理用户的登录、权限控制和会话。通过详细的Shiro配置,开发者可以自定义访问控制...

    cas+shiro+spring实例

    标题 "cas+shiro+spring实例" 涉及到的是一个集成CAS(Central Authentication Service)和Apache Shiro的Spring应用程序实例。这个实例是专为初学者设计的,旨在帮助他们理解和实现基于CAS的单点登录(Single Sign-...

    Shiro+SpringMVC+Spring集成

    标题 "Shiro+SpringMVC+Spring集成" 涉及的是在Web开发中整合Apache Shiro、Spring MVC和Spring框架的过程。这三个组件都是Java Web开发中的重要工具,Shiro负责安全认证和授权,Spring MVC处理MVC模式的实现,而...

    shiro+spring+mybatis整合

    首先,Shiro是Apache的一个开源安全框架,提供了认证、授权、加密和会话管理等功能,为Java应用提供了一站式的安全管理解决方案。在整合Shiro时,我们需要创建一个Shiro配置类,定义Realm(领域),该领域将与我们的...

    SpringMVC+Apache Shiro+JPA(hibernate)整合

    Shiro通过简洁的API,使得在应用中集成安全功能变得简单易行。例如,可以使用Shiro的Subject接口来处理用户身份, Realm接口则用于连接数据源获取用户信息,以完成认证和授权过程。 再来看`JPA(Java Persistence ...

    Apache Shiro 集成-spring

    总的来说,Apache Shiro与Spring的集成可以让我们在Spring的环境中充分利用Shiro的安全功能,为应用程序提供全面的安全保障。通过理解和实践这些知识点,开发者可以构建更加安全可靠的Java应用。

    springboot+cas5.2.3+shiro+pac4j实现sso集成2

    Shiro是Apache的一个开源安全框架,它提供了一种简单的方式来管理应用的安全性,包括认证、授权和会话管理。在SSO场景下,Shiro可以作为服务端的认证代理,接收CAS提供的Ticket进行二次验证,并进行权限控制。 ...

    Spring MVC+Mybatis+Ehcache+Apache Shiro+Bootstrap整合开发java仓库管理系统源码

    - 配置Ehcache,定义缓存策略和生命周期,与Spring集成实现缓存管理。 - 配置Apache Shiro,创建安全配置,定义 Realm 进行身份验证和授权,设置过滤链以控制访问权限。 - 将Bootstrap样式和JavaScript库引入到项目...

    springMVC+spring+mybatis(shiro+redis)框架样本

    4. **Shiro框架**:Apache Shiro是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能。在这个样本项目中,Shiro被用来实现权限控制,包括用户登录验证、角色与权限分配、访问控制等,确保只有...

    springboot+shiro+swagger2前后端分离整合

    在Spring Boot中集成Shiro,可以实现用户身份验证、权限控制以及会话管理,为Web应用程序提供安全防护。 3. **Swagger2**: Swagger2是一个用于设计、构建、文档化和使用RESTful Web服务的工具。它使用OpenAPI规范...

    基于SpringBoot + Thymeleaf + Layui + Apache Shiro + Redis + .zip

    标题 "基于SpringBoot + Thymeleaf + Layui + Apache Shiro + Redis + .zip" 描述了一个使用现代Web开发技术构建的项目。这个项目利用了SpringBoot作为核心框架,Thymeleaf作为模板引擎,Layui作为前端UI框架,...

Global site tag (gtag.js) - Google Analytics