当前位置: 首页 > news >正文

JFinal 整合 Shiro 补充Realm类和数据库

为什么80%的码农都做不了架构师?>>>   hot3.png

JFinal 整合 Shiro原文:

http://my.oschina.net/smile622/blog/135098

 

在此基础上 补充数据库和MyShiroRealm.java

users表

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `users`
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `mail` varchar(100) DEFAULT NULL,
  `roleid` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `RoleId` (`roleid`),
  CONSTRAINT `users_ibfk_1` FOREIGN KEY (`roleid`) REFERENCES `roles` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('1', '1', '1', '1@126.com', '1');
INSERT INTO `users` VALUES ('2', 'admin', 'admin', 'admin@126.com', '2');

roles表

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `roles`
-- ----------------------------
DROP TABLE IF EXISTS `roles`;
CREATE TABLE `roles` (
  `id` int(11) NOT NULL,
  `rolename` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of roles
-- ----------------------------
INSERT INTO `roles` VALUES ('1', 'user');
INSERT INTO `roles` VALUES ('2', 'sysadmin');

MyShiroRealm.java

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.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.PrincipalCollection;

import xxx.model.Roles;
import xxx.model.Users;

/**
 * 自实现用户与权限查询. 演示关系,密码用明文存储,因此使用默认 的SimpleCredentialsMatcher.
 */
public class MyShiroRealm extends AuthorizingRealm {

	/**
	 * 认证回调函数, 登录时调用.
	 */
	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(
			AuthenticationToken authcToken) throws AuthenticationException {
		UsernamePasswordToken token = (UsernamePasswordToken) authcToken;

		String password = String.valueOf(token.getPassword());
		// 调用操作数据库的方法查询user信息
		Users user = Users.dao.findFirst(
				"select * from users where username = ?", token.getUsername());
		if (user != null) {
			if (password.equals(user.getStr("password"))) {
				Session session = SecurityUtils.getSubject().getSession();
				session.setAttribute("username", user.getStr("username"));
				return new SimpleAuthenticationInfo(user.getInt("id"),
						user.getStr("password"), getName());
			} else {
				return null;
			}
		} else {
			return null;
		}
	}

	/**
	 * 授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用.
	 */
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(
			PrincipalCollection principals) {
		int userId = (int) principals.fromRealm(getName()).iterator().next();
		Users user = Users.dao.findById(userId);
		if (user != null) {
			SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
			Roles role = Roles.dao.findById(user.getInt("roleid"));
			info.addRole(role.getStr("rolename"));
			// info.addStringPermissions( role.getPermissions()
			// );//如果你添加了对权限的表,打开此注释,添加角色具有的权限

			return info;
		} else {
			return null;
		}
	}

}

 

FreeMarker添加Shiro标签(需要加入shiro-freemarker-tags-0.1-SNAPSHOT.jar)

FreeMarkerRender.getConfiguration().setSharedVariable("shiro", new ShiroTags()); // FreeMarker中使用shiro标签

到这一步基本的权限就够了

附带Shiro.ini

[main]
shiro.loginUrl = /login

#realm
myRealm = xxx.manage.shiro.ShiroDbRealm
securityManager.realm = $myRealm

#cache
shiroCacheManager = org.apache.shiro.cache.ehcache.EhCacheManager
shiroCacheManager.cacheManagerConfigFile = classpath:ehcache-shiro.xml
securityManager.cacheManager = $shiroCacheManager

#session
sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
sessionDAO.activeSessionsCacheName = shiro-activeSessionCache
sessionManager.sessionDAO = $sessionDAO
securityManager.sessionManager = $sessionManager
securityManager.sessionManager.globalSessionTimeout = 360000

#这里的规则,web.xml中的配置的ShiroFilter会使用到。
[urls]
/manage/** = authc, roles[user]
/** = anon

密码加密等其他功能请另查阅资料,如需更多复杂应用请查阅http://www.oschina.net/question/925382_114550

 

转载于:https://my.oschina.net/stu51/blog/168739

相关文章:

  • ngx_http_footer_filter_module导致的问题
  • 25岁前每个人都应该拥有的25件东西(双语)
  • Tomcat:IOException while loading persisted sessions: java.io.EOFException 解决
  • js左侧三级菜单导航实例代码
  • PHP -- 文件下载
  • Hadoop集群部署模型纵览2
  • 【转】jQuery选择器大全
  • centos的用户、组权限、添加删除用户等操作的详细操作命令
  • 按需加载的实现方法
  • OpenCV学习-——OpenCV永久配置(win7 64位+VS2012+OpenCV 2.4.6)
  • [World Wind学习]22.相机高度和瓦片等级计算
  • 修改apache+php上传文件大小限制
  • paip.mysql 性能测试 报告 home right
  • 我的2013校招总结
  • C语言函数可变长度参数剖析
  • @angular/forms 源码解析之双向绑定
  • 【剑指offer】让抽象问题具体化
  • 2017前端实习生面试总结
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Git的一些常用操作
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript 基础知识 - 入门篇(一)
  • java概述
  • LintCode 31. partitionArray 数组划分
  • Mac转Windows的拯救指南
  • Rancher如何对接Ceph-RBD块存储
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • SpriteKit 技巧之添加背景图片
  • SQLServer插入数据
  • SQLServer之创建显式事务
  • ubuntu 下nginx安装 并支持https协议
  • vue--为什么data属性必须是一个函数
  • Windows Containers 大冒险: 容器网络
  • 分享一份非常强势的Android面试题
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 简析gRPC client 连接管理
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 力扣(LeetCode)965
  • 小而合理的前端理论:rscss和rsjs
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 怎样选择前端框架
  • - 转 Ext2.0 form使用实例
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • #Linux(Source Insight安装及工程建立)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (a /b)*c的值
  • (Forward) Music Player: From UI Proposal to Code
  • (Git) gitignore基础使用
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)计算机毕业设计高校学生选课系统
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (四) Graphivz 颜色选择
  • (四)linux文件内容查看