BOS项目 第7天(shiro权限框架进行认证和授权)

BOS项目笔记 第7天

今天内容安排:

1、权限概述(认证、授权)

2、常见的权限控制的方式(URL拦截权限控制、方法注解权限控制)

3、权限数据模型(权限表、角色表、用户表、角色权限关系表、用户角色关系表)

4、shiro框架入门

5、将shiro应用到bos项目中进行认证和授权

1. 权限概述

系统提供了很多功能,并不是所有的用户登录系统都可以操作这些功能。我们需要对用户的访问进行控制。

认证:系统提供的用于识别用户身份的功能(通常是登录功能)-----让系统知道你是谁??

授权:系统提供的赋予用户访问某个功能的能力-----让系统知道你能做什么??

2. 常见的权限控制的方式

2.1 URL拦截权限控制---基于过滤器或者拦截器

2.2 方法注解权限控制---基于代理技术

3. 权限模块数据模型

用户表:t_user

角色表:auth_role

权限表:auth_function

用户角色关系表:user_role

角色权限关系表:role_function

4. apache shiro

官网:http://shiro.apache.org/

Apache Shiro is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management. With Shiro’s easy-to-understand API, you can quickly and easily secure any application – from the smallest mobile applications to the largest web and enterprise applications.

l 提供的功能:

l shiro的程序运行流程图:

Application code:应用程序代码,开发人员编写的代码

Subject:主体,当前用户

SecurityManager:安全管理器,shiro框架的核心对象,管理各个组件

Realm:类似于Dao,负责访问安全数据(用户数据、角色数据、权限数据)

5. 将shiro应用到bos项目

第一步:导入shiro-all.jar

第二步:在web.xml中配置一个spring用于整合shiro的过滤器

第三步:在spring配置文件中配置一个bean,id必须和上面的过滤器名称相同


<!-- 配置一个工厂bean,用于创建shiro框架用到过滤器 -->

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">

<!-- 注入安全管理器 -->

<property name="securityManager" ref="securityManager"></property>

<!-- 注入当前系统的登录页面 -->

<property name="loginUrl" value="/login.jsp"/>

<!-- 注入成功页面 -->

<property name="successUrl" value="/index.jsp"/>

<!-- 注入权限不足提示页面 -->

<property name="unauthorizedUrl" value="/unauthorizedUrl.jsp"/>

<!-- 注入URL拦截规则 -->

<property name="filterChainDefinitions">

<value>

/css/** = anon

/images/** = anon

/js/** = anon

/login.jsp* = anon

/validatecode.jsp* = anon

/userAction_login.action = anon

/page_base_staff.action = perms["staff"]

/* = authc

</value>

</property>

</bean>

第四步:在spring配置文件中注册安全管理器,为安全管理器注入realm


<!-- 注册自定义realm -->

<bean id="bosRealm" class="com.itheima.bos.shiro.BOSRealm"></bean>

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

<!-- 注入上面的realm -->

<property name="realm" ref="bosRealm"/>

</bean>

第五步:自定义一个BOSRealm


public class BOSRealm extends AuthorizingRealm {

@Resource

private IUserDao userDao;

/**

* 认证方法

*/

protected AuthenticationInfo doGetAuthenticationInfo(

AuthenticationToken token) throws AuthenticationException {

System.out.println("认证方法。。。");

UsernamePasswordToken upToken = (UsernamePasswordToken) token;

String username = upToken.getUsername();// 从令牌中获得用户名

User user = userDao.findUserByUsername(username);

if (user == null) {

// 用户名不存在

return null;

} else {

// 用户名存在

String password = user.getPassword();// 获得数据库中存储的密码

// 创建简单认证信息对象

/***

* 参数一:签名,程序可以在任意位置获取当前放入的对象

* 参数二:从数据库中查询出的密码

* 参数三:当前realm的名称

*/

SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user,

password, this.getClass().getSimpleName());

return info;//返回给安全管理器,由安全管理器负责比对数据库中查询出的密码和页面提交的密码

}

}

/**

* 授权方法

*/

protected AuthorizationInfo doGetAuthorizationInfo(

PrincipalCollection principals) {

return null;

}

}

第六步:完善UserAction的login方法


public String login(){

//生成的验证码

String key = (String) ServletActionContext.getRequest().getSession().getAttribute("key");

//判断用户输入的验证码是否正确

if(StringUtils.isNotBlank(checkcode) && checkcode.equals(key)){

//验证码正确

//获得当前用户对象

Subject subject = SecurityUtils.getSubject();//状态为“未认证”

String password = model.getPassword();

password = MD5Utils.md5(password);

//构造一个用户名密码令牌

AuthenticationToken token = new UsernamePasswordToken(model.getUsername(), password);

try{

subject.login(token);

}catch (UnknownAccountException e) {

e.printStackTrace();

//设置错误信息

this.addActionError(this.getText("usernamenotfound"));

return "login";

}catch (Exception e) {

e.printStackTrace();

//设置错误信息

this.addActionError(this.getText("loginError"));

return "login";

}

//获取认证信息对象中存储的User对象

User user = (User) subject.getPrincipal();

ServletActionContext.getRequest().getSession().setAttribute("loginUser", user);

return "home";

}else{

//验证码错误,设置错误提示信息,跳转到登录页面

this.addActionError(this.getText("validateCodeError"));

return "login";

}

}

第七步:在自定义Realm中编写授权方法

6. shiro提供的权限控制方式

6.1 URL拦截权限控制

6.2 方法注解权限控制

第一步:在spring配置文件中开启shiro的注解支持

第二步:在Action的方法上使用shiro的注解描述执行当前方法需要具有的权限

第三步:修改BaseAction的构造方法

第四步:在struts.xml中配置全局异常捕获,统一跳转到权限不足的页面

6.3 页面标签权限控制

第一步:在jsp页面中引入shiro的标签

第二步:使用shiro的标签根据当前用户拥有的权限动态展示页面元素

6.4 代码级别权限(了解)

时间: 2024-12-11 01:43:24

BOS项目 第7天(shiro权限框架进行认证和授权)的相关文章

(转)shiro权限框架详解05-shiro授权

http://blog.csdn.net/facekbook/article/details/54910606 本文介绍 授权流程 授权方式 授权测试 自定义授权realm 授权流程 开始构造SecurityManager环境subject.isPermitted()授权securityManager.isPermitted()执行授权Authorizer执行授权Realm根据身份获取资源权限信息结束 授权方式 Shiro支持三种方式的授权: 编程式:通过写if/else授权代码块完成. Sub

(转) shiro权限框架详解06-shiro与web项目整合(上)

http://blog.csdn.net/facekbook/article/details/54947730 shiro和web项目整合,实现类似真实项目的应用 本文中使用的项目架构是springMVC+mybatis,所以我们是基于搭建好的项目进行改造的. 将shiro整合到web应用中 登录 退出 认证信息在页面展现,也就是显示菜单 shiro的过滤器 将shiro整合到web应用中 数据库脚步 sql脚步放到项目中,项目上传到共享的资源中,文章最后给出共享url. 去除项目中不使用shi

shiro权限框架与spring框架轻松整合

2017年06月26日 17:53:30 阅读数:419 shiro是一个权限框架,用于管理网站的权限,大到网站登录过滤,小到一个菜单或按钮是否显示,shiro学习起来非常简单,以下是shiro的执行流程图: 看完不懂的请下载shiro全套视频教程: http://pan.baidu.com/s/1jHOX2MM Subject为当前用户,当它访问系统的时候,就会经过SecurityManager安全管理器,安全管理器类似一个中转站,它实际上会让Realm类来处理用户的认证和授权信息,认证和授权

Shiro权限框架简介

http://blog.csdn.net/xiaoxian8023/article/details/17892041 Shiro权限框架简介 2014-01-05 23:51 3111人阅读 评论(37) 收藏 举报  分类: [java框架](25)  版权声明:本文为博主原创文章,未经博主允许不得转载.如需转载请声明:[转自 http://blog.csdn.net/xiaoxian8023 ] 目录(?)[+] 最近加入了gxpt项目组,被安排做权限模块,所以也有幸第一次接触到了Shiro

BOS项目 第8天(权限管理添加、角色管理添加、用户管理添加、shiro权限框架使用ecache缓存)

BOS项目笔记 第8天 今天内容安排: 1.权限管理(初始化.查询.添加) 2.角色管理(添加.查询) 3.用户管理(添加.查询) 4.修改自定义Realm中的授权方法(基于数据库实现) 5.使用ehcache缓存权限数据 6.系统左侧菜单根据登录人的权限动态展示 1. 权限管理 1.1 初始化权限数据 执行sql脚本文件初始化权限数据: 1.2 权限分页查询 第一步:修改页面中datagrid的URL地址,访问FunctionAction的pageQuery的分页查询方法 第二步:创建Func

shiro权限框架

权限的组成部分:用户 资源 角色 权限 数据库关系表设计是根据自己项目需求设计的 account表role表(id,rolename)account_role(id,aid,rid)permission(id,pername)role_permission(id,rid,pid) 没有设置用户和权限的关系,我们可以认为用户的权限是通过角色来决定的 1.导入jar包 shiro-all-1.2.1.jar 2.配置web.xml <!-- 权限过滤器--> <filter> <

shiro权限框架实战

shiro框架作为一种开源的权限框架,通过将身份认证和授权从具体的业务逻辑中分离出来极大地提高了我们的开发速度,它的易用性使得它越来越受到人们的青睐.与之前的ACL权限框架相比,shiro能更容易的实现权限控制,而且作为基于RBAC的权限管理框架通过与shiro标签结合使用,能够让开发人员在更加细粒度的层面上进行控制.举个例子来讲,之前我们使用基于ACL的权限控制大多是控制到连接(这里的连接大家可以简单的认为是页面,下同)层面,也就是通过给用户授权让这个用户对某些连接拥有权限,这种情况显然不太适

SpringMVC整合Shiro权限框架

尊重原创:http://blog.csdn.net/donggua3694857/article/details/52157313 最近在学习Shiro,首先非常感谢开涛大神的<跟我学Shiro>系列,在我学习的过程中发挥了很大的指导作用.学习一个新的东西首先就是做一个demo,多看不如多敲,只有在实践中才能发现自己的欠缺,下面记录下来我整合shiro的过程.如果有不足之处,还望各位看官多多指出. 一.基本名词解释 Apache Shiro是一个强大易用的Java安全框架.它可以帮助我们完成:

Spring Boot:整合Shiro权限框架

综合概述 Shiro是Apache旗下的一个开源项目,它是一个非常易用的安全框架,提供了包括认证.授权.加密.会话管理等功能,与Spring Security一样属基于权限的安全框架,但是与Spring Security 相比,Shiro使用了比较简单易懂易于使用的授权方式.Shiro属于轻量级框架,相对于Spring Security简单很多,并没有security那么复杂. 优势特点 它是一个功能强大.灵活的.优秀的.开源的安全框架. 它可以胜任身份验证.授权.企业会话管理和加密等工作. 它