shiro-helloworld
1.目录结构
2.log4j.properties
- #
- # 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.
- #
- 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=WARN
- # Spring
- log4j.logger.org.springframework=WARN
- # Default Shiro logging
- log4j.logger.org.apache.shiro=TRACE
- # Disable verbose logging
- log4j.logger.org.apache.shiro.util.ThreadContext=WARN
- log4j.logger.org.apache.shiro.cache.ehcache.EhCache=WARN
3.shiro.ini
- #
- # 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
- # -----------------------------------------------------------------------------
- [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 '' ("That's the same combination on
- # my luggage!!!" ;)), and role 'president'
- presidentskroob = , 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 'delete' (action) the user (type) with
- # license plate 'zhangsan' (instance specific id)
- goodguy = user:delete:zhangsan
4.Quickstart.java
- package com.hxlz.helloworld;
- 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) {
- Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
- SecurityManager securityManager = factory.getInstance();
- SecurityUtils.setSecurityManager(securityManager);
- // 获取当前的 Subject. 调用 SecurityUtils.getSubject();
- Subject currentUser = SecurityUtils.getSubject();
- // 测试使用 Session
- // 获取 Session: Subject#getSession()
- 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 + "]");
- }
- // 测试当前的用户是否已经被认证. 即是否已经登录.
- // 调动 Subject 的 isAuthenticated()
- if (!currentUser.isAuthenticated()) {
- // 把用户名和密码封装为 UsernamePasswordToken 对象
- UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
- // rememberme
- token.setRememberMe(true);
- try {
- // 执行登录.
- currentUser.login(token);
- log.info("----> 该用户已登录!");
- }
- // 若没有指定的账户, 则 shiro 将会抛出 UnknownAccountException 异常.
- catch (UnknownAccountException uae) {
- log.info("----> There is no user with username of " + token.getPrincipal());
- return;
- }
- // 若账户存在, 但密码不匹配, 则 shiro 会抛出 IncorrectCredentialsException 异常。
- catch (IncorrectCredentialsException ice) {
- log.info("----> Password for account " + token.getPrincipal() + " was incorrect!");
- return;
- }
- // 用户被锁定的异常 LockedAccountException
- catch (LockedAccountException lae) {
- log.info("The account for username " + token.getPrincipal() + " is locked. " +
- "Please contact your administrator to unlock it.");
- }
- // 所有认证时异常的父类.
- catch (AuthenticationException ae) {
- }
- }
- //通过currentUser.getPrincipal()获取登录用户名
- log.info("----> User [" + currentUser.getPrincipal() + "] logged in successfully.");
- // 测试是否有某一个角色. 调用 Subject 的 hasRole 方法.
- if (currentUser.hasRole("schwartz")) {
- log.info("----> May the Schwartz be with you!");
- } else {
- log.info("----> Hello, mere mortal.");
- return;
- }
- //test a typed permission (not instance-level)
- // 测试用户是否具备某一个行为. 调用 Subject 的 isPermitted() 方法。
- 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.");
- }
- //a (very powerful) Instance Level permission:
- // 测试用户是否具备某一个行为.
- if (currentUser.isPermitted("user:delete:zhangsan")) {
- 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!");
- }
- // 执行登出. 调用 Subject 的 Logout() 方法.
- System.out.println("---->" + currentUser.isAuthenticated());
- //登出
- currentUser.logout();
- System.out.println("---->" + currentUser.isAuthenticated());
- System.exit(0);
- }
- }
shiro-helloworld的更多相关文章
- 第一节:Shiro HelloWorld 实现
1.新建maven工程,pom配置maven jar包 <dependency> <groupId>org.apache.shiro</groupId> <a ...
- Shiro学习
Shiro学习资源 Shiro官网,http://shiro.apache.org/index.html 学习网站链接,http://blog.java1234.com/blog/articles/4 ...
- shiro(安全框架)
shiro.apache.org JavaSE环境搭建Shiro框架 1/导入与 shiro相关的Jar包 所有集好的环境可以在如下目录查找 复制如上文件到工程中 2/配置文件:储存临时文件 shir ...
- Shiro-HelloWord
HelloWorld Shiro的HelloWorld不是我们写的,而是看Shiro给我们提供的一段代码.通过这段代码可以看到Shiro大致的使用方式. 1.找到Shiro的jar包 目前的最新稳定版 ...
- shiro-core包引用的版本问题
在做shiro学习时,遇到这样的问题: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/ ...
- Shrio第一天——入门与基本概述
一.Shiro是什么 Apache Shiro是Java的一个安全框架.(希罗:/笑哭) Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境. sh ...
- Shrio Demo
package com.atguigu.shiro.helloworld; import org.apache.shiro.SecurityUtils; import org.apache.shiro ...
- Shiro 的 HelloWorld
密码文件 [users] zhang=123 wang=123 测试 package org.zln.hello; import org.apache.log4j.LogManager; import ...
- shiro的Helloworld
package shiro; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePassword ...
- Shiro 加密helloWorld
承接第一章 初解加密 只贴更改的源码,其他看上一篇. ShiroRealm.java package com.lkk.shiro.realms; import org.apache.shiro.aut ...
随机推荐
- Java基础(五) final关键字浅析
前面在讲解String时提到了final关键字,本文将对final关键字进行解析. static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提 ...
- 面试官:你了解过Redis对象底层实现吗
上一章我们讲了Redis的底层数据结构,不了解的人可能会有疑问:这个和平时用的五大对象有啥关系呢?这一章我们就主要解释他们所建立的联系. 看这个文件之前,如果对ziplist.skiplist.int ...
- Ubuntu --- Xshell 连接 VirtualBox下安装的Ubuntu
1.桥接模式 打开VirtualBox管理器---设置---网络---连接方式选择桥接网卡 2.安装ssh服务 安装: sudo apt-get install openssh-server 启动: ...
- Metasploit渗透测试
原创博客,转载请注出处! 学习笔记 参考书籍<Metasploit渗透测试指南(修订版)> 经过多日学习,初步掌握metasploit基本参数和使用方法,现进行渗透测试实践 靶机IP:16 ...
- vue结合Ant Design实现后台系统的权限分配(支持无限子级嵌套)
最近公司的业务需要,要做一个后台管理系统的管理系统类似于这样子 功能需求如下: 左边是权限菜单,右边对应的是具体权限. 1.父级权限菜单选中,父级权限菜单的权限包括其中所有子级权限菜单的权限也要选中, ...
- Flink UDF
本文会主要讲三种udf: ScalarFunction TableFunction AggregateFunction 用户自定义函数是非常重要的一个特征,因为他极大地扩展了查询的表达能力.本文除了介 ...
- 微信商城小程序 带java后台源码
微信小程序商城(Java版) 技术选型 1 后端使用技术 1.1 spring-web-4.0.2.RELEASE 1.2 mybatis3.2.8 1.3 shiro1.2.3 1.4 servle ...
- Linux五种IO模型 ——Java学习笔记
本文摘自网络: 1.阻塞IO(blocking IO) 在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样: 图1 阻塞IO 当用户进程调用了re ...
- ajax入门级
AJAX AJAX:即异步的JavaScript 和 XML,是一种用于创建快速动态网页的技术: 传统的网页(不使用AJAX)如果需要更新内容,必需重载整个网页面: 使用AJAX则不与要加载更新整个网 ...
- Docker入门简介(一)
Docker 介绍 Docker是Docker.lnc公司开源的一个基于LXC技术智商构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2.0协议开源. Do ...