Java-Shiro(二):HelloWord
新建项目&&配置pom.xml导入包
新建maven java project项目;
修改pom.xml:
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.dx.spring.shiro</groupId>
- <artifactId>shiro-02</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>Archetype - shiro-02</name>
- <url>http://maven.apache.org</url>
- <dependencies>
- <dependency>
- <groupId>org.apache.shiro</groupId>
- <artifactId>shiro-core</artifactId>
- <version>1.2.4</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.7.13</version>
- </dependency>
- </dependencies>
- </project>
新建shiro.ini和log4j日志配置文件log4j.properties
在项目的src/main/java下新建shiro.ini和log4j.properties文件
shiro.ini和log4j.properties文件可以从
拷贝,shiro.ini文件内容为:
- # -----------------------------------------------------------------------------
- # Users and their assigned roles
- # -----------------------------------------------------------------------------
- [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
- # -----------------------------------------------------------------------------
- [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
修改log4j.properties
- log4j.rootLogger=INFO, stdout
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m %n
- # General Apache libraries
- log4j.logger.org.apache=INFO
- # Spring
- log4j.logger.org.springframework=INFO
- # Default Shiro logging
- log4j.logger.org.apache.shiro=INFO
- # Disable verbose logging
- log4j.logger.org.apache.shiro.util.ThreadContext=INFO
- log4j.logger.org.apache.shiro.cache.ehcache.EhCache=INFO
新建com.dx.spring.shiro包,把
下Quickstart.java拷贝到com.dx.spring.shiro包下:
- package com.dx.spring.shiro;
- import org.apache.shiro.SecurityUtils;
- import org.apache.shiro.authc.*;
- import org.apache.shiro.config.IniSecurityManagerFactory;
- import org.apache.shiro.mgt.SecurityManager;
- import org.apache.shiro.session.Session;
- import org.apache.shiro.subject.Subject;
- import org.apache.shiro.util.Factory;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- public class Quickstart {
- private static final transient Logger log = LoggerFactory.getLogger(Quickstart.class);
- public static void main(String[] args) {
- // The easiest way to create a Shiro SecurityManager with configured
- // realms, users, roles and permissions is to use the simple INI config.
- // We'll do that by using a factory that can ingest a .ini file and
- // return a SecurityManager instance:
- // Use the shiro.ini file at the root of the classpath (file: and url:
- // prefixes load from files and urls respectively):
- Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
- SecurityManager securityManager = factory.getInstance();
- // for this simple example quickstart, make the SecurityManager
- // accessible as a JVM singleton.
- // Most applications wouldn't do this and instead rely on their
- // container configuration or web.xml for webapps.
- // That is outside the scope of this simple quickstart, so we'll just do
- // the bare minimum so you can continue to get a feel for things.
- SecurityUtils.setSecurityManager(securityManager);
- // 获取当前环境下的一个Subject操作对象
- // Now that a simple Shiro environment is set up, let's see what you can
- // do: get the currently executing user:
- Subject currentUser = SecurityUtils.getSubject();
- // 将一个对象存储到shiro的Session对象中,并验证是否有操作权限。
- // Do some stuff with a Session (no need for a web or EJB container!!!)
- Session session = currentUser.getSession();
- session.setAttribute("someKey", "aValue");
- String value = (String) session.getAttribute("someKey");
- if (value.equals("aValue")) {
- log.info("Retrieved the correct value! [" + value + "]");
- }
- // let's login the current user so we can check against roles and
- // permissions:
- if (!currentUser.isAuthenticated()) {
- UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
- token.setRememberMe(true);
- try {
- currentUser.login(token);
- } catch (UnknownAccountException uae) {
- log.info("There is no user with username of " + token.getPrincipal());
- } catch (IncorrectCredentialsException ice) {
- log.info("Password for account " + token.getPrincipal() + " was incorrect!");
- } catch (LockedAccountException lae) {
- log.info("The account for username " + token.getPrincipal() + " is locked. "
- + "Please contact your administrator to unlock it.");
- }
- // ... catch more exceptions here (maybe custom ones specific to
- // your application?
- catch (AuthenticationException ae) {
- // unexpected condition? error?
- }
- }
- // say who they are:
- // print their identifying principal (in this case, a username):
- log.info("User [" + currentUser.getPrincipal() + "] logged in successfully.");
- // test a role:
- if (currentUser.hasRole("schwartz")) {
- log.info("May the Schwartz be with you!");
- } else {
- log.info("Hello, mere mortal.");
- }
- // test a typed permission (not instance-level)
- if (currentUser.isPermitted("lightsaber:weild")) {
- log.info("You may use a lightsaber ring. Use it wisely.");
- } else {
- log.info("Sorry, lightsaber rings are for schwartz masters only.");
- }
- // 验证当前认证用户是否拥有某个具体操作:商品管理:删除:商品ID为5的记录
- // a (very powerful) Instance Level permission:
- if (currentUser.isPermitted("winnebago:drive:eagle5")) {
- log.info(
- "You are permitted to 'drive' the winnebago with license plate (id) 'eagle5'. Here are the keys - have fun!");
- } else {
- log.info("Sorry, you aren't allowed to drive the 'eagle5' winnebago!");
- }
- // all done - log out!
- currentUser.logout();
- System.exit(0);
- }
- }
编译运行,打印信息如下:
- 2018-06-13 19:54:00,673 INFO [org.apache.shiro.session.mgt.AbstractValidatingSessionManager] - Enabling session validation scheduler...
- 2018-06-13 19:54:01,441 INFO [com.dx.spring.shiro.Quickstart] - Retrieved the correct value! [aValue]
- 2018-06-13 19:54:01,443 INFO [com.dx.spring.shiro.Quickstart] - User [lonestarr] logged in successfully.
- 2018-06-13 19:54:01,444 INFO [com.dx.spring.shiro.Quickstart] - May the Schwartz be with you!
- 2018-06-13 19:54:01,445 INFO [com.dx.spring.shiro.Quickstart] - You may use a lightsaber ring. Use it wisely.
- 2018-06-13 19:54:01,445 INFO [com.dx.spring.shiro.Quickstart] - You are permitted to 'drive' the winnebago with license plate (id) 'eagle5'. Here are the keys - have fun!
Java-Shiro(二):HelloWord的更多相关文章
- Java EE : 二、图解 Cookie(小甜饼)
目录 Java EE : 一.图解Http协议 Java EE : 二.图解 Cookie(小甜饼) Java EE : 三.图解Session(会话) 概述 一.概述 二.详细介绍Cookie 传输 ...
- 利用JAVA生成二维码
本文章整理于慕课网的学习视频<JAVA生成二维码>,如果想看视频内容请移步慕课网. 维基百科上对于二维码的解释. 二维条码是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图 ...
- java实现二维码
说起二维码,微信好像最先启用,随后各类二维码就开始流行起来了.那什么是二维码呢. 1.什么是二维码?百度一下即可 http://baike.baidu.com/view/132241.htm?fr=a ...
- Java 设计模式(二)-六大原则
Java 设计模式(二)-六大原则 单一职责原则(Single Responsibility Principle) 定义: 不要存在多余一个原因导致类变更,既一个类只负责一项职责. 问题由来: 当类A ...
- Java进阶(二十五)Java连接mysql数据库(底层实现)
Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...
- 20175212童皓桢 Java实验二-面向对象程序设计实验报告
20175212童皓桢 Java实验二-面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设 ...
- java 多线程二
java 多线程一 java 多线程二 java 多线程三 java 多线程四 线程中断: /** * Created by root on 17-9-30. */ public class Test ...
- Linux -- 基于zookeeper的java api(二)
Linux -- 基于zookeeper的java api(二) 写一个关于基于集群的zookeeper的自定义实现HA 基于客户端和监控器:使用监控的方法查看每个注册过的节点的状态来做出操作. Wa ...
- 浅谈Java代理二:Cglib动态代理-MethodInterceptor
浅谈Java代理二:Cglib动态代理-MethodInterceptor CGLib动态代理特点: 使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM字节码生 ...
- java 生成二维码、可带LOGO、可去白边
1.准备工作 所需jar包: JDK 1.6: commons-codec-1.11.jar core-2.2.jar javase-2.2.jar JDK 1.7: commons-codec- ...
随机推荐
- j.u.c系列(10)---之并发工具类:Semaphore
写在前面 Semaphore是一个计数信号量,它的本质是一个"共享锁". 信号量维护了一个信号量许可集.线程可以通过调用acquire()来获取信号量的许可:当信号量中有可用的许可 ...
- centos docker compose安装
docker compose离线安装 通过联网机器下载docker-compose离线安装包(参见Downloads部分) https://github.com/docker/compose/rele ...
- JavaScript正则表达式在不同浏览器中可能遇到的问题
这两天在用正则表达式搞一个稍微有点复杂的东西,但是不同浏览器之间的差异可浪费了我不少的人参. 现在我把正则表达式在五大主流浏览器(IE.firefox.Chrome.Safari.Opera,以当前版 ...
- JavaScript基础之运算符及全面的运算符优先级总结
算数运算符: 加+,减—,乘*,除/,求余%,加加++,减减——, 加减乘除求余运算与数学上的用法完全一样. 不过,加号+还有连接字符串的作用,其他运算符还可以将字符串数字转换成数值型,参见JavaS ...
- [原创]互联网金融App测试介绍
[原创]互联网金融App测试介绍 前端时间非常忙,终于非常忙的时间过去了,抽时间总结下我现在所在公司理财软件App测试,也各位分享下,也欢迎大家提建议,谢谢! 先介绍下我所在公司的产品特点,公司所研发 ...
- 安装node.js / npm / express / KMC
http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html 1. 下载Node.js官方Windows版程序: http://nodej ...
- STM32F4xx -- Cortex M4
STM32F4xx official page: http://www.st.com/internet/mcu/subclass/1521.jspIntroductionFPU - Floating ...
- Unity3D实践系列11, 组件的添加和访问
当把一个脚本附加到一个GameObject上的时候,这个GameObject就有了脚本组件. 通过GameObject的属性获取组件 比如如下: [RequireComponent(typeof(Ri ...
- DotNetty的通道处理细节
第一,客户端如何向服务器主动发送消息: 第二,服务器如何向指定客户端发送消息: 第三,在哪里做报文的拆包和组包. public partial class FrmMain : Form { publi ...
- python测试开发django-31.admin后台一对多操作ForeignKey
前言 平常的网页上有很多一对多的场景,比如填写银行卡信息的时候,会从银行列表下拉框选择对应的银行信息.一般会建两张表,一张表放银行的信息,一张表放银行卡信息. 每个银行可以对应多个银行卡,每个银行卡只 ...