shiro自定义Realm

1.1 自定义Realm

上边的程序使用的是shiro自带的IniRealm,IniRealm从ini配置文件中读取用户的信息,大部分情况下需要从系统的数据库中读取用户信息,所以需要自定义realm。分享牛系列,分享牛专栏,分享牛。

1.1.1 shiro提供的realm

 

 

最基础的是Realm接口,CachingRealm负责缓存处理,AuthenticationRealm负责认证,AuthorizingRealm负责授权,通常自定义的realm继承AuthorizingRealm。

1.1.2 自定义Realm

public class CustomRealm1 extends AuthorizingRealm {

	@Override
	public String getName() {
		return "customRealm1";
	}

	//支持UsernamePasswordToken
	@Override
	public boolean supports(AuthenticationToken token) {
		return token instanceof UsernamePasswordToken;
	}

	//认证
	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(
			AuthenticationToken token) throws AuthenticationException {

		//从token中 获取用户身份信息
		String username = (String) token.getPrincipal();
		//拿username从数据库中查询
		//....
		//如果查询不到则返回null
		if(!username.equals("zhang")){//这里模拟查询不到
			return null;
		}

		//获取从数据库查询出来的用户密码
		String password = "123";//这里使用静态数据模拟。。

		//返回认证信息由父类AuthenticatingRealm进行认证
		SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(
				username, password, getName());

		return simpleAuthenticationInfo;
	}

}

// 授权
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(
			PrincipalCollection principals) {
		// 获取身份信息
		String username = (String) principals.getPrimaryPrincipal();
		// 根据身份信息从数据库中查询权限数据
		//....这里使用静态数据模拟
		List<String> permissions = new ArrayList<String>();
		permissions.add("user:create");
		permissions.add("user.delete");

		//将权限信息封闭为AuthorizationInfo

		SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
		for(String permission:permissions){
			simpleAuthorizationInfo.addStringPermission(permission);
		}

		return simpleAuthorizationInfo;
	}

1.1.3 shiro-realm.ini

[main]

#自定义 realm

customRealm=cn.shareniu.shiro.authentication.realm.CustomRealm1

#将realm设置到securityManager

securityManager.realms=$customRealm

 

思考:这里为什么不用配置[users]了??

shiro-permission.ini中的[roles]为什么不需要了??

1.1.4 测试代码

测试代码同入门程序,将ini的地址修改为shiro-realm.ini。

分别模拟账号不存在、密码错误、账号和密码正确进行测试。

 分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) java架构师交流群 523988350

时间: 2024-10-05 01:27:58

shiro自定义Realm的相关文章

权限框架 - shiro 自定义realm

上篇文章中是使用的默认realm来实现的简单登录,这仅仅只是个demo,真正项目中使用肯定是需要连接数据库的 首先创建自定义realm文件,如下: 在shiro中注入自定义realm的完全限定类名: 1 [main] 2 # your custom realm path 3 fooRealm=com.lee.shiro.realm.FooRealm 4 # DI such as spring DI 5 securityManager.realms=$fooRealm 自定义realm认证: 1

Shiro Review——自定义Realm实现认证

一,自定义Realm   在之前,使用过下面的ini文件进行认证测试: #对用户信息进行配置 [users] #用户名跟密码 zhangsan=111111 lisi=111111   里面用户的认证信息是写死的,so,now ,来测试下使用自定义Realm来从我们的DB读取User信息,完成用户认证.   首先大致看下Realm的类层级关系:    比如,我们之前使用ini文件中的users配置用户名跟密码的时候,认证和时候使用的Realm就是IniRealm,比如里面的JdbcRealm,我

Shiro Review——自定义Realm实现授权

   在自定义Realm中,可以进对数据库的查询,将认证后的用户的资源权限全部查询出来. /** * 自定义Realm * @author LiuHuiChao * */ public class CustomRealm extends AuthorizingRealm{ @Override public void setName(String name) { super.setName("customName"); } /** * 认证方法 */ @Override protecte

shiro 自定义过滤器,拦截过期session的请求,并且以ajax形式返回

自定义过滤器: public class CustomFormAuthenticationFilter extends FormAuthenticationFilter { @Override protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { if (isLoginRequest(request, response)) { if (isLogi

Shiro 教程

Shiro是apache提供的强大而灵活的开源安全框架,它主要用来处理身份认证,授权,企业会话管理和加密. shiro功能:用户验证.用户执行访问权限控制.在任何环境下使用session API,如cs程序.可以使用多数据源如同时使用oracle.mysql.单点登录(sso)支持.remember me服务. 我在业余草网站上整理过相关的Shiro教程.但是由于业余草网站的权重太低,导致搜索不到我的网站上.因此我在这里在分享一下! 水平权限漏洞原理.修复以及检测方法 安全开源权限框架Shiro

码农从菜鸟到大牛的必须文章

几年前我也是一个码农菜鸟,我也常常幻想着成为技术大牛. 如何减小与"大牛"的差距是我常常不得不面对的话题.今天从我走过来的路来总结一下成为大牛的技术之路. 先来看一张程序员的时间管理图. 除了时间管理,技术学习也是少不了的.下面推荐一下比较好的技术文章. 使用瀑布流插件 Masonry 进行瀑布流布局 业余草微信公众号上线了! 使用HTML5 Canvas实现火焰风暴动画 HTML5 实现3D翻转立方体 使用 HTML5 制作像素太空战机游戏 常用的Linux关机命令大全 5个常用的L

shiro spring struts-shiro自定义authc过滤器的问题

问题描述 shiro自定义authc过滤器的问题 配置了 过滤器代码如下public class FormAuthenticationCaptchaFilter extends FormAuthenticationFilter { public static final String DEFAULT_CAPTCHA_PARAM = ""captcha""; private String captchaParam = DEFAULT_CAPTCHA_PARAM;pub

SpringMVC整合Shiro

这里用的是SpringMVC-3.2.4和Shiro-1.2.2,示例代码如下 首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-in

spring mvc+shiro+cas 实现cas client功能 跳转回来404

问题描述 spring mvc+shiro+cas 实现cas client功能 跳转回来404 http://securitycenter.com:8080/gtsys/cas?ticket=ST-14-HEDhc1GVQt0UYdiZpi7R-cas 返回这个地址 404 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.or