`

shiro初级认识

    博客分类:
  • java
 
阅读更多

一、 介绍:

shiro是apache提供的强大而灵活的开源安全框架,它主要用来处理身份认证,授权,企业会话管理和加密。

shiro功能:用户验证、用户执行访问权限控制、在任何环境下使用session API,如cs程序。可以使用多数据源如同时使用oracle、mysql。单点登录(sso)支持。remember me服务。详细介绍还请看官网的使用手册:http://shiro.apache.org/reference.html

与spring security区别,个人觉得二者的主要区别是:

1、shiro灵活性强,易学易扩展。同时,不仅可以在web中使用,可以工作在任务环境内中。

2、acegi灵活性较差,比较难懂,同时与spring整合性好。

如果对权限要求比较高的项目,个人建议使用shiro,主要原因是可以很容易按业务需求进行扩展。

附件是对与shiro集成的jar整合及源码。

二、shiro与spring集成

      shiro默认的配置,主要是加载ini文件进行初始化工作,具体配置,还请看官网的使用手册(http://shiro.apache.org/web.html)init文件不支持与spring的集成。此处主要是如何与spring及springmvc集成。

    1、web.xml中配置shiro过滤器,web.xml中的配置类使用了spring的过滤代理类来完成。

Xml代码  收藏代码
  1. <filter>  
  2.    <filter-name>shiroFilter</filter-name>  
  3.     <filter-class>  
  4.         org.springframework.web.filter.DelegatingFilterProxy  
  5.     </filter-class>         
  6. </filter>  
  7. <filter-mapping>  
  8.     <filter-name>shiroFilter</filter-name>  
  9.     <url-pattern>/*</url-pattern  
  10. </filter-mapping>  
    2、在spring中的application.xml文件中添加shiro配置:
Xml代码  收藏代码
  1. <!--securityManager是shiro的核心,初始化时协调各个模块运行-->  
  2. <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">  
  3.    <!--单个realm使用realm,如果有多个realm,使用realms属性代替-->   
  4.    <property name="realm" ref="leopardRealm" />  
  5.    <property name="cacheManager" ref="shiroEhcacheManager" />  
  6. </bean>  
  7.     <!--realm配置,realm是shiro的桥梁,它主要是用来判断subject是否可以登录及权限等-->  
  8.     <bean id="leopardRealm" class="com.leopard.shiro.realm.LeopardRealm" />  
  9.     <!--shiro过滤器配置,bean的id值须与web中的filter-name的值相同-->  
  10.     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
  11.     <property name="securityManager" ref="securityManager" />  
  12.          <!-- 没有权限或者失败后跳转的页面 -->  
  13.      <property name="loginUrl" value="/login/login.jsp" />   
  14.      <property name="successUrl" value="/main/index.jsp" />  
  15.      <property name="unauthorizedUrl" value="/login/unauthorized" />  
  16.         <property name="filterChainDefinitions">  
  17.             <value>  
  18.                 /login/logoutlogout=logout  
  19.                 /login/**=anon  
  20.                 /**=authc,rest  
  21.             </value>  
  22.         </property>  
  23.     </bean>  
  24.     <!-- 用户授权/认证信息Cache, 采用EhCache 缓存 -->  
  25.     <bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">  
  26.         <property name="cacheManagerConfigFile" value="classpath:ehcache-shiro.xml"/>  
  27.     </bean>  
 配置说明:
  •  securityManager是shiro的核心,初始化时协调各个模块运行。
  • realm是shiro的桥梁,进行数据源配置,shrio提供了常用的realm数据源配置,如LDAP的JndiLdapRealm,JDBC的JdbcRealm,ini文件的IniRealm,properties文件的PropertiesRealm等,也可以插入自己的 Realm实现来代表自定义的数据源。此处使用了自定义的leopardRealm进行配置,java代码如下:
    Java代码  收藏代码
    1. public class LeopardRealm extends AuthorizingRealm {  
    2.     /** 
    3.      * 授权方法,在配有缓存的情况下,只加载一次。 
    4.      */  
    5.     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {  
    6.         SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();  
    7.                  //获取用户信息的所有资料,如权限角色等.  
    8.                  //info.setStringPermissions(权限集合);  
    9.         //info.setRoles(角色集合);  
    10.         return info;  
    11.     }  
    12.     /** 
    13.      * 登陆认证 
    14.      */  
    15.     @Override  
    16.     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)  
    17.                throws AuthenticationException {  
    18.         UsernamePasswordToken usernamePasswordToke = (UsernamePasswordToken)token;  
    19.         String username = usernamePasswordToke.getUsername();  
    20.         return new SimpleAuthenticationInfo(new ShiroUser("admin""admin"), "admin",  
    21.                         ByteSource.Util.bytes("admin"), getName());  
    22.           
    23.     }  
    24. }  
      简单登录操作:
      login.jsp代码
Jsp代码  收藏代码
  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <html>  
  3. <body>  
  4.     <form  action="${pageContext.request.contextPath}/login" method="post">  
  5.         用户名:<input id="username" name="username" />  
  6.                 密码:<input id="password" type="password" name="password" />  
  7.             记住我:<input type="checkbox" name="rememberMe" />  
  8.                 <input type="submit" name="submit" value="submit"/>  
  9.     </form>  
  10. </body>  
  11. </html>  
   springMVC控制层代码:
Java代码  收藏代码
  1. import javax.servlet.http.HttpServletRequest;  
  2. import javax.servlet.http.HttpServletResponse;  
  3. import org.apache.shiro.SecurityUtils;  
  4. import org.apache.shiro.authc.AuthenticationException;  
  5. import org.apache.shiro.authc.IncorrectCredentialsException;  
  6. import org.apache.shiro.authc.UnknownAccountException;  
  7. import org.apache.shiro.authc.UsernamePasswordToken;  
  8. import org.apache.shiro.subject.Subject;  
  9. import org.springframework.stereotype.Controller;  
  10. import org.springframework.web.bind.annotation.RequestMapping;  
  11. import org.springframework.web.servlet.ModelAndView;  
  12. @Controller("loginAction")  
  13. @RequestMapping("/login")  
  14. public class LoginAction  {  
  15.     @RequestMapping("")  
  16.        //登录  
  17.     public ModelAndView execute(HttpServletRequest request,  
  18.             HttpServletResponse response,String username,String password) {  
  19.         UsernamePasswordToken token = new UsernamePasswordToken(username,password);  
  20.         //记录该令牌  
  21.         token.setRememberMe(false);  
  22.         //subject权限对象  
  23.         Subject subject = SecurityUtils.getSubject();  
  24.         try {  
  25.             subject.login(token);  
  26.         } catch (UnknownAccountException ex) {//用户名没有找到  
  27.             ex.printStackTrace();  
  28.         } catch (IncorrectCredentialsException ex) {//用户名密码不匹配  
  29.             ex.printStackTrace();  
  30.         }catch (AuthenticationException e) {//其他的登录错误  
  31.             e.printStackTrace();  
  32.         }  
  33.           
  34.         //验证是否成功登录的方法  
  35.         if (subject.isAuthenticated()) {  
  36.             return new ModelAndView("/main/index.jsp");  
  37.         }  
  38.         return new ModelAndView("/login/login.jsp");  
  39.     }  
  40.       
  41.         //退出  
  42.     @RequestMapping("/logout")  
  43.     public void logout() {  
  44.         Subject subject = SecurityUtils.getSubject();  
  45.         subject.logout();  
  46.     }  
  47. }  
 最后启动服务登录,实验证明,失败返回登录页,成功进入主页。
分享到:
评论

相关推荐

    SSM+shiro初级项目框架

    SSM+shiro初级项目:ssm+mysql+shiro。只有验证,没有授权,说明连接:https://blog.csdn.net/qq_27102865/article/details/101299500

    这个只是Shiro框架的初次认识

    在这个初次认识Shiro的讲解中,我们将深入探讨Shiro的核心概念、架构以及如何在Java项目中进行集成。 1. **Shiro的三大核心组件** - **Authentication(认证)**:确认用户身份的过程,即验证用户提供的身份信息...

    oa-shiro-activiti-poi初级版本

    《OA-Shiro-Activiti-Poi初级版本:整合与应用详解》 在信息化办公环境中,OA(Office Automation)系统扮演着至关重要的角色,它能够有效提升企业内部的工作效率和协同能力。而Shiro、Activiti和Poi是三个在Java...

    shiro(shiro1.3.2)

    Apache Shiro是一个强大且易用的Java安全框架,主要用于处理认证、授权、加密以及会话管理等核心安全性问题。在给定的压缩包"shiro1.3.2"中,包含了Shiro的一个核心组件库"shiro-all-1.3.2.jar"以及两个日志管理库...

    shiro1.7.1.zip

    在使用Shiro 1.7.1时,开发者可以根据具体需求选择合适的模块进行集成,例如,Web应用可能会主要依赖`shiro-core`、`shiro-web`和`shiro-spring`,而需要进行复杂加密操作的应用可能需要`shiro-crypto-hash`和`shiro...

    shiro所有版本jar

    Apache Shiro是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,可以非常方便地用于构建和强化应用程序的安全性。Shiro的核心目标是为开发者提供一个简单易用的安全API,使得开发者能够快速...

    shiro教程 跟我学Shiro教程

    Apache Shiro是一款强大的...通过上述资源,你将能够逐步构建起对Shiro框架的全面认识,并具备在实际项目中应用Shiro解决安全问题的能力。记得结合实践来巩固理论,这样才能更好地理解和掌握Shiro的核心概念和用法。

    Apache_Shiro_使用手册(一)Shiro架构介绍

    ### Apache Shiro 使用手册(一)Shiro架构介绍 #### 一、Shiro简介 Apache Shiro 是一款功能强大且易于使用的 Java 安全框架,它提供了多种安全相关的功能和服务,包括但不限于认证、授权、加密和会话管理。相较...

    shiro_tool.zip

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。在"shiro_tool.zip"这个压缩包中,我们可以推测可能包含了一些关于Shiro使用的工具类、...

    shiro-redisson基于Redis的ShiroCache和Session实现

    `shiro-redisson` 模块就是为了解决这个问题,将 Shiro 的缓存(Cache)和会话(Session)管理功能与 Redis 结合,实现了基于 Redis 的分布式解决方案。 1. **Redisson 库的介绍** Redisson 是一个全面的 Redis ...

    shiro-jar.zip

    shiro-all-1.7.1.jar,shiro-aspectj-1.7.1.jar,shiro-cache-1.7.1.jar,shiro-config-core-1.7.1.jar,shiro-config-ogdl-1.7.1.jar,shiro-core-1.7.1.jar,shiro-crypto-cipher-1.7.1.jar,shiro-crypto-core-1.7.1.jar...

    Apache shiro 1.13.0源码

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。Shiro 1.13.0 是其一个重要的版本,包含了多项更新和改进。在这个版本中,开发者可以深入理解其...

    shiro.freemarker.ShiroTags已打包

    Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了认证、授权、加密和会话管理功能,简化了开发人员在应用程序中处理安全问题的复杂性。ShiroTags 是 Shiro 提供的一套用于模板引擎的标签库,如 Freemarker ...

    shiro-core-1.7.1 jar

    shiro shiro-core-1.7.1 jar shiro漏洞

    shiro权限案例demo

    Apache Shiro是一个强大且易用的Java安全框架,主要用于身份认证、授权(权限控制)、会话管理和加密等安全相关的功能。在这个"shiro权限案例demo"中,我们将深入探讨Shiro如何实现用户权限的管理。 首先,让我们...

    shiro1.7.1全包修补漏洞.rar

    Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密服务。这个"shiro1.7.1全包修补漏洞.rar"文件包含了针对Apache Shiro 1.7.1版本的一些安全修复和更新,旨在解决可能存在的...

    shiro例子,及书籍shiro.rar

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常方便地开发出足够安全的应用。在这个压缩包中,包含了一个"跟我学shiro"的书籍和一个名为"shiro-example-master"的...

    shiro最简单整合版本

    Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、加密和会话管理功能,简化了处理安全性的工作。在本文中,我们将深入探讨 Apache Shiro 的核心概念及其最简单的整合方式。 一、Shiro 的核心...

    shiro-demo_DEMO_shiro_shriodemo_shiro框架demo_shiro前后端分离_

    本项目"shiro-demo_DEMO_shiro_shriodemo"是一个基于 Shiro 实现的前后端分离的演示示例,旨在帮助开发者快速理解和应用 Shiro 在实际项目中的功能。 **1. Shiro 框架基础** Shiro 提供了以下核心组件: - **...

Global site tag (gtag.js) - Google Analytics