[shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证

本文地址:http://blog.csdn.net/sushengmiyan/article/details/39933993

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

shiro中文手冊:http://wenku.baidu.com/link?url=ZnnwOHFP20LTyX5ILKpd_P94hICe9Ga154KLj_3cCDXpJWhw5Evxt7sfr0B5QSZYXOKqG_FtHeD-RwQvI5ozyTBrMAalhH8nfxNzyoOW21K

本文作者:sushengmiyan

------------------------------------------------------------------------------------------------------------------------------------

一。新建java webproject 这里取名为shirodemo

二。加入依赖的jar包。例如以下:


三。加入web对shiro的支持

如第一篇文章所述,在此基础上添加webs.xml部署描写叙述:

  <listener><listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class></listener><filter><filter-name>shiro</filter-name><filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class></filter><filter-mapping><filter-name>shiro</filter-name><url-pattern>/*</url-pattern></filter-mapping>

四。加入jsp页面登陆button以及标签支持:

<%String user = request.getParameter("username");String pwd = request.getParameter("password");
if(user != null && pwd != null){Subject sub = SecurityUtils.getSubject();String context = request.getContextPath();try{sub.login(new UsernamePasswordToken(user.toUpperCase(),pwd));out.println("登录成功");}catch(IncorrectCredentialsException e){out.println("{success:false,msg:'username和password不对!'}");}catch(UnknownAccountException e){out.println("{success:false,msg:'用户名不存在。'}");}return;
}
%>

在jsp页面中添加username与password登陆框。

五。新建realm实现

package com.susheng.shiro;import javax.annotation.PostConstruct;import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.cache.CacheManager;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;//认证数据库存储
public class ShiroRealm extends AuthorizingRealm {public Logger logger = LoggerFactory.getLogger(getClass());final static String AUTHCACHENAME = "AUTHCACHENAME";public static final String HASH_ALGORITHM = "MD5";public static final int HASH_INTERATIONS = 1;public ShiroDbRealm() {// 认证super.setAuthenticationCachingEnabled(false);// 授权super.setAuthorizationCacheName(AUTHCACHENAME);}// 授权@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {if (!SecurityUtils.getSubject().isAuthenticated()) {doClearCache(principalCollection);SecurityUtils.getSubject().logout();return null;}// 加入角色及权限信息SimpleAuthorizationInfo sazi = new SimpleAuthorizationInfo();return sazi;}// 认证@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {UsernamePasswordToken upToken = (UsernamePasswordToken) token;String userName = upToken.getUsername();String passWord = new String(upToken.getPassword());AuthenticationInfo authinfo = new SimpleAuthenticationInfo(userName, passWord, getName());return authinfo;}/*** 设定Password校验的Hash算法与迭代次数.*/@PostConstructpublic void initCredentialsMatcher() {HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(HASH_ALGORITHM);matcher.setHashIterations(HASH_INTERATIONS);setCredentialsMatcher(matcher);}
}

六。shiro.ini文件内容添加对realm的支持。

#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
# =============================================================================
# Quickstart INI Realm configuration
#
# For those that might not understand the references in this file, the
# definitions are all based on the classic Mel Brooks' film "Spaceballs". ;)
# =============================================================================# -----------------------------------------------------------------------------
# Users and their assigned roles
#
# Each line conforms to the format defined in the
# org.apache.shiro.realm.text.TextConfigurationRealm#setUserDefinitions JavaDoc
# -----------------------------------------------------------------------------#realm
myRealm = com.susheng.shiro.ShiroDbRealm
securityManager.realm = $myRealm[users]
# user 'root' with password 'secret' and the 'admin' role
root = secret, admin
# user 'guest' with the password 'guest' and the 'guest' role
guest = guest, guest
# user 'presidentskroob' with password '12345' ("That's the same combination on
# my luggage!!!" ;)), and role 'president'
presidentskroob = 12345, president
# user 'darkhelmet' with password 'ludicrousspeed' and roles 'darklord' and 'schwartz'
darkhelmet = ludicrousspeed, darklord, schwartz
# user 'lonestarr' with password 'vespa' and roles 'goodguy' and 'schwartz'
lonestarr = vespa, goodguy, schwartz# -----------------------------------------------------------------------------
# Roles with assigned permissions
# 
# Each line conforms to the format defined in the
# org.apache.shiro.realm.text.TextConfigurationRealm#setRoleDefinitions JavaDoc
# -----------------------------------------------------------------------------
[roles]
# 'admin' role has all permissions, indicated by the wildcard '*'
admin = *
# The 'schwartz' role can do anything (*) with any lightsaber:
schwartz = lightsaber:*
# The 'goodguy' role is allowed to 'drive' (action) the winnebago (type) with
# license plate 'eagle5' (instance specific id)
goodguy = winnebago:drive:eagle5[urls]
/login.jsp = anon
/index.html = user
/index.jsp = user
/homePageDebug.jsp = user
/module/** = user

七。tomcat添加对这个应用的部署。启动tomcat,输入相应的url。

查看实现效果:


登录界面的显示


点击登录之后,插入了shiro的实现。

临时没有进行实质认证。仅仅是大概搭建的shiro环境。

自己插入自己的realm实现就能够了。


OK。如今。以及实现了对web的支持。

代码下载地址:http://download.csdn.net/detail/sushengmiyan/8022503


转载于:https://www.cnblogs.com/yfceshi/p/6934510.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web安全之Cookie劫持

1.Cookie是什么? 2.窃取的原理是什么? 3.系统如何防Cookie劫持呢? 看完这三个回答&#xff0c;你就明白哪位传奇大侠是如何成功的!!! Cookie: HTTP天然是无状态的协议&#xff0c;为了维持和跟踪用户的状态&#xff0c;引入了Cookie和Session。Cookie包含了浏览器客户端的用…

运动估计简介

运动估计( Motion Estimation) 维基百科链接&#xff1a;http://en.wikipedia.org/wiki/Motion_estimation运动估计的应用有很多&#xff0c;最初的应用的领域是视频的编码。运动估计算法一般分为: 像素递归法pel-recursive algorithm (PRA)和块匹配法 block-matching algorith…

andriod studio 运行 无结果_华为物联网操作系统LiteOS内核教程01——IoT-Studio介绍及安装...

1. 物联网一站式开发工具 —— IoT StudioIoT Studio 是支持 LiteOS 嵌入式系统软件开发的工具&#xff0c;提供了代码编辑、编译、烧录 及调试等一站式开发体验&#xff0c;支持 C、C、汇编等多种开发语言&#xff0c;让您快速&#xff0c;高效地进 行物联网开发。2. IoT Stud…

颜色转换

以蓝色为例&#xff0c;#0000FF应该被表示成rgb(0,0,255)。 我们将函数命名为getRGB() &#xff08;可以将字符串视为数组&#xff0c;这个数组的元素为字符&#xff09; function getRGB(color) {var rgb [parseInt(0xcolor.slice(1,3)),parseInt(0xcolor.slice(3,5)),parseI…

android 按键会触发ontouch吗?_Android实现炫酷的拖拽浮动按钮

IOS的Assistive Touch效果很炫酷&#xff0c;可以任意拖拽&#xff0c;同时点击后会展开菜单栏。然而&#xff0c;这不只是IOS的特权&#xff0c;Android也可以实现。但是由于悬浮窗需要申请权限&#xff0c;所以本文仅在app内实现&#xff0c;可以任意拖拽&#xff0c;并可以响…

强名称程序集(strong name assembly)——为程序集赋予强名称

引言&#xff1a;在曾经的项目开发中&#xff0c;在程序集中见到过一个后缀为*.snk的文件。当时看这个文件的图标。感觉可能是企业内部保护版权啥的一种方式。一&#xff0c;强程序集攻克了哪些问题&#xff1f;1&#xff0c;唯一标识一个程序集2&#xff0c;放置程序集被仿冒和…

如何成为一名合格的数据分析师

“21世纪什么最贵&#xff0c;人才”&#xff0c;在目前大数据时代下&#xff0c;什么最难找&#xff0c;什么最贵&#xff0c;实现数据价值的人&#xff0c;数据分析师。 但是对于数据分析师的认识&#xff0c;比较极端&#xff0c;但对数据分析师价值的认识正在回归理性。很多…

银联pos小票word模板_商家pos机刷卡必须知道的知识

相信很多卡友伙伴或者商铺店家都装有pos机&#xff0c;然后一般pos机都没有使用说明书&#xff0c;更没有结合刷卡方法在内的秘籍。今天我就分享下刷卡必须知道的一些知识。刚刚办理pos机的当天一定要注意&#xff1a;使用之前呢&#xff0c;务必核对一下基本信息&#xff0c;例…

java 空接口_学Java,java接口搞明白了吗?大牛让你一文搞清楚

前言对于面向对象编程来说&#xff0c;抽象是一个极具魅力的特征。如果一个程序员的抽象思维很差&#xff0c;那他在编程中就会遇到很多困难&#xff0c;无法把业务变成具体的代码。在 Java 中&#xff0c;可以通过两种形式来达到抽象的目的&#xff0c;一种是抽象类&#xff0…

Check Point CEO:“我们正在积极寻找收购目标”

Check Point Sofrware Technologies很可能成为下一个会产生收购案的主流安全厂商&#xff0c;首席执行官Gil Shwed在该公司第二季度财报电话会议上这样表示。 “我们正在积极地寻求收购目标&#xff0c;期待无论是大规模的还是小规模的扩张&#xff0c;”Shwed表示。“我们在并…

Spark SQL 编程API入门系列之SparkSQL数据源

不多说&#xff0c;直接上干货&#xff01; SparkSQL数据源&#xff1a;从各种数据源创建DataFrame 因为 spark sql&#xff0c;dataframe&#xff0c;datasets 都是共用 spark sql 这个库的&#xff0c;三者共享同样的代码优化&#xff0c;生成以及执行流程&#xff0c;所以 s…

Java中final关键字的几种用法

在java的关键字中&#xff0c;static和final是两个我们必须掌握的关键字。不同于其他关键字&#xff0c;他们都有多种用法&#xff0c;而且在一定环境下使用&#xff0c;可以提高程序的运行性能&#xff0c;优化程序的结构。下面我们来了解一下final关键字及其用法。 final关键…

一致性hash算法_(图文案例)一致性哈希算法详解 一点课堂(多岸教育)

一致性Hash算法关于一致性Hash算法&#xff0c;在我之前的博文中已经有多次提到了&#xff0c;MemCache超详细解读一文中”一致性Hash算法”部分&#xff0c;对于为什么要使用一致性Hash算法、一致性Hash算法的算法原理做了详细的解读。算法的具体原理这里再次贴上&#xff1a;…

《HTML5 Canvas游戏开发实战》——2.1 绘制基本图形

本节书摘来自华章计算机《HTML5 Canvas游戏开发实战》一书中的第2章&#xff0c;第2.1节,作者&#xff1a;张路斌著&#xff0c; 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 2.1 绘制基本图形 所谓基本图形&#xff0c;就是指线、矩形、圆等最简单的图形&#x…

Npgsql使用入门(三)【批量导入数据】

Program.cs代码: class Program{static void Main(string[] args){var test new PgBulkCopyHelper<SingleBuilding>("bld_amap_gzmain");foreach (string pName in test.PropNames){Console.WriteLine("name: {0},\t\ttype: {1}", pName, test.Prop…

远程网络视频监视技术

目前要实现广域网视频监视&#xff0c;主要通过三种方式实现&#xff1a;1.硬盘录像机&#xff1b;2.网络视频服务器&#xff1b;3.网络摄像机。 硬盘录像机是一个以录像为主的设备&#xff0c;有的可以支持IE浏览。网络视频服务器一般前端不录像&#xff0c;直接将影像传输到…

python常用代码_Python常用算法学习(3)(原理+代码)——最全总结

1&#xff0c;什么是算法的时间和空间复杂度算法(Algorithm)是指用来操作数据&#xff0c;解决程序问题的一组方法&#xff0c;对于同一个问题&#xff0c;使用不同的算法&#xff0c;也许最终得到的结果是一样的&#xff0c;但是在过程中消耗的资源和时间却会有很大的区别。那…

数据监测驱动下的信息流广告优化

信息流广告是什么 “今日头条和百度必有一战”&#xff0c;相信不少的互联网人在过去几个月都听到过类似的断言。定位于信息分发平台的今日头条和主营搜索业务的百度会产生如此大的利益冲突&#xff0c;最核心的点其实就是信息流广告。 信息流广告指的是在用户使用互联网产品或…

在idea中使用git管理你的项目

起步 idea是十分智能的Java集成开发环境 而我们在用idea写项目的时候经常遇到版本控制的问题,而git工具如果你只会在终端中的git命令来进行控制,可能会使得效率低下 今天小编就教大家在idea中使用git来管理你的项目 首先创建一个项目 点击create new projects 这里选择默认…

偏好设置

转载于:https://www.cnblogs.com/xufengyuan/p/6959424.html