037 shiro框架的介绍和使用 - bos

官网:shiro.apache.org

一、shiro介绍

1.shiro框架的核心功能:认证、授权、会话管理、加密

2.shiro框架认证流程:

3.涉及的相关概念和类

ApplicationConde,应用程序代码,由开发人员进行开发
Subject,框架提供的接口,代表当前用户对象
SecurityManager,框架提供的接口,代表安全管理器,是shiro框架最核心的对象
Realm,可以开发人员编写,框架也提供一些,类似于DAO,用于访问权限数据

4.导包方式:只要导入shiro-all,相当于导入了所有的分包

二、shiro相关配置简单介绍

ShiroFilterFactoryBean:是一个工厂类,用于创建过滤器,进行权限拦截,要求对其注入SecurityManager,以及三个URL

authc过滤器为shiro过滤器类的别名,用于检查用户是否认证过(俗称的登录) - 此时可以取消自己编写的登录过滤器了
anon过滤器为匿名访问过滤器,表示不登录也能访问资源
perms过滤器用于检查权限,用于检查登录用户是否具有对应的权限:/page_base_staff.action = perms["staff-list"]

**表示多级子目录
validatecode.jsp*表示通配(用于匹配不同的参数参数)

三、在bos项目中使用shiro框架进行认证

1.在porm.xml中引入对shiro框架的依赖

<!-- 引入shiro框架的依赖 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-all</artifactId>
<version>1.2.2</version>
</dependency>

2.在web.xml中配置过滤器,Spring提供的,用于整合shiro框架,注意要放在struts2过滤器的前面

<!-- 配置Spring框架提供的用于整合shiro框架的过滤器 -->
<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>

3.配置完过滤器后,会要求Spring工厂提供一个对应名称(如按上述配置就是shiroFilter)的Bean,若不提供则项目启动报错

4.对于shiroFilter,要为其注入securityManager、相关URL以及URL的拦截规则

<!-- 配置shiro框架的工厂对象 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"></property>
<!-- 注入相关页面访问URL -->
<property name="loginUrl" value="/login.jsp"/>
<property name="successUrl" value="/index.jsp"/>
<property name="unauthorizedUrl" value="unauthorized.jsp"/>

<!-- 注入URL拦截规则 -->
<property name="filterChainDefinitions">
<value>
/css/** = anon
/js/** = anon
/images/** = anon
/validatecode.jsp* = anon
/login.jsp = anon
/userAction_login.action = anon
/page_base_staff.action = perms["staff-list"]
/* = authc
</value>
</property>
</bean>

5.对于securityManager,需要为其注入realm,该reaml可以是自定义的,也可以是框架提供的

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="bosRealm"></property>
</bean>

6.编写自定义的Realm

public class BosRealm extends AuthorizingRealm{

//认证方法
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken arg0) throws AuthenticationException {

UsernamePasswordToken token = (UsernamePasswordToken) arg0;
//获得页面输入的用户名
String username = token.getUsername();
//根据用户名从数据库查询实体
User user = userDao.findByUsername(username);

if(user == null){
//页面输入的用户名不存在
return null;
}
//框架负责检验输入和数据库查询出来的对象是否一致

//简单认证信息对象
AuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getPassword(), this.getName());
//返回信息对象,由安全管理器调用认证器进行信息认证
return info;
}

//授权方法
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
return null;
}

@Autowired
private UserDao userDao;

public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}

}

7.配置自定义的bosRealm

<bean id="bosRealm" class="com.hao.bos.realm.BosRealm"/>

8.重写UserAction的登录方法,利用shiroFilter进行登录的过滤

/**
* 用户登录,使用shiro框架提供的方式进行认证
*
* @return
*/
public String login() {

// 先校验验证码是否输入正确
String validatecode = (String) session.get("key");
if (StringUtils.isNotBlank(checkcode) && checkcode.equals(validatecode)) {
// 使用shiro框架提供的方式进行认证

// 获得当前用户对象,里面包含认证状态
Subject subject = SecurityUtils.getSubject();
// 创建用户名密码令牌对象
AuthenticationToken token = new UsernamePasswordToken(model.getUsername(), MD5Utils.md5(model.getPassword()));
try {
subject.login(token);
} catch (UnknownAccountException e) {
this.addActionError("用户名不存在!");
return LOGIN;
} catch (IncorrectCredentialsException e) {
this.addActionError("密码输入错误!");
return LOGIN;
} catch (Exception e) {
this.addActionError("发生未知错误!");
return LOGIN;
}
//取得查询出来的User对象,放到Session
User user = (User) subject.getPrincipal();
session.put("loginUser", user);
return HOME;

} else {
// 输入验证码错误。设置提示信息,
this.addActionError("输入的验证码错误");
return LOGIN;
}
}

四、在BosRealm中完成授权

//授权方法
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
//创建授权信息对象
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
//添加具体的授权信息
info.addStringPermission("staff-list");

//TODO 后期需要修改为根据当前用户查询数据库,获取实际对应的权限

//返回授权信息对象
return info;
}

时间: 2024-11-10 14:14:25

037 shiro框架的介绍和使用 - bos的相关文章

shiro框架--权限管理

一.maven坐标 1 <!-- 权限控制 框架 --> 2 <dependency> 3 <groupId>org.apache.shiro</groupId> 4 <artifactId>shiro-all</artifactId> 5 <version>${shiro.version}</version> 6 </dependency> 二.shiro框架的四大功能 1.认证 2.授权 3.加

Apache Shiro权限框架理论介绍

Apache Shiro权限管理框架介绍 Apache Shiro的官网地址如下: http://shiro.apache.org/ Apache Shiro是一个简单易用且强大而灵活的开源Java安全框架,以下简称Shiro.它干净利落地处理身份认证.授权以及企业会话管理和加密.Shiro拥有易于理解的API,你可以快速且容易地使用它来保护任何应用程序--从最小的移动应用程序到最大的web和企业应用程序. Shiro权限基础概念: 安全实体:就是被权限系统保护的对象,比如工资数据. 权限:就是

shiro框架入门

一.shiro框架简介 Apache Shiro是Java的一个安全框架.其内部架构如下: 下面来介绍下里面的几个重要类: Subject:主体,应用代码直接交互的对象就是Subject.代表了当前用户,这个用户不一定表示人. SecurityManager:安全管理器,它管理着所有的Subject 原文地址:https://www.cnblogs.com/lzxin/p/9926401.html

spring整合shiro框架

上一篇文章已经对shiro框架做了一定的介绍,这篇文章讲述使用spring整合shiro框架,实现用户认证已经权限控制 1.搭建环境 这里不在赘述spring环境的搭建,可以简单的搭建一个ssm框架,整合后进行简单的测试 1.1 添加依赖 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.3

关于jsp商城开发中一些常用框架的介绍

Struts跟Tomcat.Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点,使java商城产品以及jsp商城开发者能更深入的了解其内部实现机制.除此之外,在 java商城开发 中Struts的优点主要集中体现在两个方面:Taglib和页面导航.Taglib是Struts的标记库,比较灵活,能大大提高开发效率.另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点.struts历经6年多的发展,是目前用户数最

上课笔记_Ajax框架,DWR介绍,应用,例子

使用Ajax框架 1. 简化JavaScript的开发难度 2. 解决浏览器的兼容性问题 3. 简化开发流程 常用Ajax框架 Prototype 一个纯粹的JavaScript函数库,对Ajax提供良好支持 jQuery 1.非常优秀的JavaScript库,对Ajax提供了良好的支持 2.与Prototype设计思想不同的是在使用jQuery之后,开发者操作的不再是DOM对象而是jQuery对象 DWR 1.        非常专业的Java Ajax框架 2.        通过DWR框架

Django - Django框架 简单介绍

Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码的Web应用框架, 由Python写成. 採用了MVC的软件设计模式, 即模型M, 视图V和控制器C. 它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的站点的, 并于2005年7月在BSD许可证下公布. 这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的.

家庭洗车APP --- Androidclient开展 之 网络框架包介绍(一)

家庭洗车APP --- Android客户端开发 之 网络框架包介绍(一) 上篇文章中给大家简单介绍了一些业务.上门洗车APP --- Android客户端开发 前言及业务简单介绍,本篇文章给大家介绍下网络框架.之前也了解过一些开源网络通讯架构.也大概看了一部分源代码.比方Afinal.Volley.AndBase.Android-async-http等,感觉各自都有各自的优劣,自己也曾封装过一些简单的网络架构,感觉有非常多地方须要注意和优化.这里就不贴出来献丑了,感兴趣的朋友能够去查阅学习上面

webUI自动化测试框架---”pyswat“介绍

webUI自动化测试框架---"pyswat"介绍 大家好我是lamecho 辣么丑,今天给大家介绍一款web自动化测试框架pyswat.  "pyswat"是一个做web页面自动化测试的框架(python-selenium-web-auto-test缩写).基于python,利用hook技术及对selenium封装,做到完全录制案例(操作步骤)不需要手写脚本,很方便有木有!:lol 举个栗子,做网站登录操作在python中你要这样写一大堆脚本 而通过pyswat的