当前常用流行的安全框架主要有两种:一个是Apache Shiro;另一个是Springsource。

现在介绍一下apache shiro

既然是安全框架,解决的肯定是权限的 控制。所谓权限是指:用户和系统之间的关系,即,某一组或一类用户在系统中所具有的不同的功能。在这为了更能诠释其关系,我们引用了角色,一个用户至少有 一个角色,不同的角色在系统之中具有不同的功能,用户不能直接和系统建立关系,只能通过角色来体现。如在数据库中有四个表来体现:用户表,角色表,权限 表,及用户的group表。用户和角色是多对多关系,角色和权限是一对多关系。

在项目中使用步骤如下:

一、在web.xml中配置

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

二、建立Dbrealm

@Component 
public class ShiroDbRealm extends AuthorizingRealm{ 
 
@Resource 
private UserService userService; 
//登录认证

@Override 
protected AuthenticationInfo doGetAuthenticationInfo( AuthenticationToken authenticationToken) throws AuthenticationException { 
 
UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken; 
User user = userService.findByLoginName(token.getUsername()); 
if(user != null) { 
  return new SimpleAuthenticationInfo(user.getLoginname(), 
      user.getPassword(),getName()); 

 
return null; 
}

//权限认证

@Override 
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection  
  principalCollection) { 
String loginName =  
  (String) principalCollection.fromRealm(getName()).iterator().next(); 
User user = userService.findByLoginName(loginName); 
if(user != null) { 
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); 
//添加Group 
info.setRoles(user.getGroupNameSet()); 
for(Group g : user.getGroupList()) { 
//添加permission 
info.addStringPermissions(g.getPermissionStringList()); 

return info; 

return null; 
}

}

三、在applicationContext-shiro.xml配置

<bean id="securityManager"  
  class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> 
<property name="realm" ref="shiroDbRealm" /> 
<property name="cacheManager" ref="cacheManager" /> 
</bean> 
 
<!-- 項目自定义Realm --> 
<bean id="shiroDbRealm" class="com.kaishengit.services.account.ShiroDbRealm" /> 
 
<!-- Shiro Filter --> 
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"
<property name="securityManager" ref="securityManager" /> 
<property name="loginUrl" value="/user!input.jspx" /> 
<property name="successUrl" value="/main.jspx" /> 
<property name="unauthorizedUrl" value="/403.jsp" /> 
<property name="filterChainDefinitions"> 
    <value> 
    /user!login.jspx = anon 
    /user.jsp = roles[user] 
    /** = authc 
 </value> 
</property>

</bean>

<bean id="cacheManager"  
class="org.apache.shiro.cache.MemoryConstrainedCacheManager" /> 
 
<bean id="lifecycleBeanPostProcessor"  
class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />

四、登录和退出

try { 
   SecurityUtils.getSubject().login( 
  new UsernamePasswordToken(user.getLoginname(), user.getPassword())); 
} catch (AuthenticationException e) { 
msg = "用户名或密码错误!"; 
return INPUT; 

 
//exit 
SecurityUtils.getSubject().logout();

五、标签

<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
 
Hello, <shiro:principal/>, how are you today? 
 
<shiro:hasRole name="administrator">  
  <a href="admin.jsp">Administer the system</a>  
 </shiro:hasRole> 
<shiro:hasAnyRoles name=“developer, manager,administrator">  
You are either a developer, manager, or administrator.   
 </shiro:lacksRole> 
<shiro:hasPermission name="user:create">  
<a href="createUser.jsp">Create a new User</a>   
 </shiro:hasPermission>

Apache Shiro(安全框架)的更多相关文章

  1. Apache Shiro权限框架在SpringMVC+Hibernate中的应用

    在做网站开发中,用户权限必须要考虑的,权限这个东西很重要,它规定了用户在使用中能进行哪 些操作,和不能进行哪些操作:我们完全可以使用过滤器来进行权限的操作,但是有了权限框架之后,使用起来会非常的方便, ...

  2. Apache Shiro 权限框架

    分享一个视屏教程集合 http://www.tudou.com/home/konghao/item 1.Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码 ...

  3. 关于Apache Shiro权限框架的一些使用误区的解释

    多了不说了,进入正题,shiro是个权限框架提供权限管理等功能,网上的教程一般都是互相抄,比如<shiro:principal property="xxx"/>这个标签 ...

  4. Java开源安全框架之Apache Shiro

    APACHE SHIRO安全框架 1      背景 Shiro项目始于2003年初,当时它叫JSecurity项目,当时对于Java应用开发人员没有太多的安全替代方案,始终被一个叫JAAS(Java ...

  5. Apache Shiro和Spring Security的详细对比

    参考资料: 1)Apache Shiro Apache Shiro:http://shiro.apache.org/ 在Web项目中应用 Apache Shiro:http://www.ibm.com ...

  6. SpringBoot集成Apache Shiro

    笔者因为项目转型的原因,对Apache Shiro安全框架做了一点研究工作,故想写点东西以便将来查阅.之所以选择Shiro也是看了很多人的推荐,号称功能丰富强大,而且易于使用.实践下来的确如大多数人所 ...

  7. Apache Shiro 开源权限框架

    在 Web 项目中应用 Apache Shiro 开源权限框架 Apache Shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证.授权.加密.会话管理等功能.认证和授权为权限控制的核心, ...

  8. Apache Shiro java安全框架

    什么是Apache Shiro? Apache Shiro(发音为“shee-roh”,日语“堡垒(Castle)”的意思)是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理功能,可为 ...

  9. JAVAEE——BOS物流项目10:权限概述、常见的权限控制方式、apache shiro框架简介、基于shiro框架进行认证操作

    1 学习计划 1.演示权限demo 2.权限概述 n 认证 n 授权 3.常见的权限控制方式 n url拦截权限控制 n 方法注解权限控制 4.创建权限数据模型 n 权限表 n 角色表 n 用户表 n ...

随机推荐

  1. windows临界区

    临界区: 临界区是一种轻量级机制,在某一时间内只允许一个线程执行某个给定代码段.通常在多线程修改全局数据时会使用临界区.事件.信号量也用于多线程同步,但临界区与它们不同,并不总是执行向内核模式的切换, ...

  2. 来自亚马逊CEO Jeff Bezos的20句经验之谈

    英文原文:The 20 Smartest Things Jeff Bezos Has Ever Said 当外界对一个公司的热情有些偏离常态时, 就会出现武断的言论,亚马逊对此就深有感受.2000 年 ...

  3. [译] 第三十天:Play Framework - Java开发者梦寐以求的框架 - 百花宫

    前言 30天挑战的最后一天,我决定学习 Play Framework .我本来想写Sacla,但是研究几个小时后,我发现没法在一天内公正评价Scala,下个月花些时间来了解并分享经验.本文我们先来看看 ...

  4. HTML 5 中的标准属性

    HTML 全局属性 HTML 属性赋予元素意义和语境. 下面的全局属性可用于任何 HTML 元素. (5)= HTML5 中添加的属性. 属性 描述 accesskey 规定激活元素的快捷键. cla ...

  5. C#中的Mutex对象认识

    我们知道,有些应用程序可以重复打开,有些只能打开一个,我以前写的程序为了防止用户打开多个程序,都是去遍历Process 查找进程的方式,现在看起来真是不专业,今天看大神的破解分析文章时,认识了mute ...

  6. android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  7. Instruments指南:如何调试内存泄露

    Instruments指南:如何调试内存泄露 开篇 现在,你应该使用的ARC,而不是原来我们使用的MRC或者其他.但是我们在使用ARC的时候也会出现内存泄露的情况. 幸运的是,苹果为我们提供了Inst ...

  8. 【转】C++的拷贝构造函数深度解读,值得一看

    建议看原帖  地址:http://blog.csdn.net/lwbeyond/article/details/6202256 一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很 ...

  9. Xcode找Library位置

  10. iOS 7中实现模糊效果

    本文译自iOS 7 Blur Effects with GPUImage. iOS 7在视觉方面有许多改变,其中非常吸引人的功能之一就是在整个系统中巧妙的使用了模糊效果.许多第三方应用程序已经采用了这 ...