`
l28554768
  • 浏览: 37571 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

shiro入门

阅读更多

一、 介绍:

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的过滤代理类来完成。

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

 

 

分享到:
评论
11 楼 xuezhanghuzhen 2016-09-30  

    
10 楼 darren_nizna 2016-09-08  
http://gitlore.com/darren/shiro/    apache-shiro-1.2.x-reference
9 楼 masuweng 2016-07-11  
javaey中怎么查看自己发表的评论呢?
8 楼 masuweng 2016-07-11  
先赞一个,多谢楼主分享.暂时不用将来会涉及到再回过头来学习
7 楼 dtl19921202 2016-07-05  
不错。给一个赞
6 楼 wubingyang527 2016-06-29  
怎么腰斩了..
5 楼 zhuhe422 2016-05-13  
没有源码啊,看不到缓存部分
4 楼 sp42 2016-01-23  
非常有用,感谢!
3 楼 Arrays9 2015-12-24  
2 楼 Arrays9 2015-12-24  
1 楼 wtaisi 2015-06-18  

相关推荐

    Shiro入门到精通

    本课程“Shiro入门到精通”旨在帮助开发者全面理解和掌握Shiro的使用,通过与Spring Security的对比,进一步突出Shiro在实际开发中的优势和适用场景。 首先,我们来探讨Shiro的基础知识。Shiro的核心组件包括...

    Shiro入门教程

    Shiro入门实例 Shiro入门教程 Shiro框架学习demo http://www.xttblog.com/?p=669 权限管理教程。Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。 Shiro可以在任何环境下运行,小到最...

    Shiro入门.rar

    在这个"Shiro入门"压缩包中,包含了笔记和源码,是学习Shiro基础知识的好资源。 **一、Shiro基本概念** 1. **认证**:也称为身份验证,是确认用户身份的过程,通常通过用户名和密码进行验证。 2. **授权**:也称为...

    shiro 入门 hello world

    在这个"shiro 入门 hello world"项目中,我们将探讨Shiro的基本概念和如何进行简单的集成。 **Shiro框架的核心组件** 1. **认证(Authentication)**:这是验证用户身份的过程。在Shiro中,可以通过`Subject`接口...

    shiro入门demo

    本教程将引导你入门 Shiro,通过一个简单的 demo 来理解其基本概念和用法。 1. **Shiro 的核心组件** - **Subject**: Shiro 中的核心概念,代表当前操作的用户或系统中的任何实体。它封装了认证、授权、会话和加密...

    shiro入门学习PPT

    shiro入门学习的一份文档,简单的介绍,简单的配置,简单的扩展 。

    Shiro入门实例

    在这个"Shiro入门实例"中,我们将探讨Shiro的基础知识和如何在项目中进行实战应用。 **1. 认证与授权** Shiro 的核心概念包括主体(Subject)、安全管理者(SecurityManager)、身份验证(Authentication)、授权...

    shiro入门学习汇总.pptx

    shiro入门学习汇总.pptx

    shiro入门教程

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、...`shiro-example-master`这个压缩包很可能是包含了一个完整的Shiro入门示例项目,你可以下载后进行学习和调试,更好地理解Shiro的工作原理和实际应用。

    apache_shiro入门实例

    Apache Shiro 是一个强大的 Java 安全框架,专注于身份验证、授权和会话管理。它提供了简单易用的 API,使得开发者...本文提供的入门实例是一个基础的起点,实际使用时,你可能需要根据项目的具体需求进行扩展和定制。

    springboot+shiro入门案例

    在本文中,我们将深入探讨如何使用SpringBoot与Apache Shiro框架构建一个入门级的应用案例。Apache Shiro是一款轻量级的安全框架,它提供身份验证、授权、会话管理和加密等功能,使得开发人员能够轻松地在应用程序中...

    shiro入门学习

    shiro入门学习,常规shiro xml配置

    shiro入门学习.ppt

    Apache Shiro 是一款强大的安全框架,它为Java开发者提供了便捷的身份认证、授权、会话管理和加密功能。在本文中,我们将深入探讨Shiro的核心概念、功能及其架构。 首先,Shiro的主要目标是简化安全管理,使其既...

    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...

    shiro入门案例_001.zip

    本入门案例将带你走进 Shiro 的世界,通过一系列简单的步骤,帮助你快速理解并掌握 Shiro 的基本用法。 Shiro 的核心组件包括: 1. **认证**:也称为身份验证,是确认用户身份的过程。在 Shiro 中,这通常涉及到...

    spring shiro整合入门

    Spring Shiro 整合入门教程 在Web应用开发中,安全是至关重要的一个环节。Spring框架作为Java领域最流行的框架之一,提供了丰富的功能,而Apache Shiro则是一款强大的安全管理框架,专注于身份验证、授权和会话管理...

Global site tag (gtag.js) - Google Analytics