文档章节

beetl 和 shrio 结合

闲大赋
 闲大赋
发布于 2013/07/08 11:10
字数 498
阅读 7858
收藏 35

shrio 提供有jsp 标签,供在jsp 里使用,如果想在beetl中使用,有俩种方法,

一是beetl支持集成jsp页面,所以你可以在在jsp里使用shrio标签

另外,beetl 使用自定义函数写了shiro tag功能,你可以像使用shiro标签那样使用shiro

package com.ext;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.Map;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.bee.tl.core.GroupTemplate;

/*gt.registerFunctionPackage("so",new ShiroExt ());

你可以在模板里直接调用,譬如
@if(so.isGuest()) {


*/
public class ShiroExt {
	/**
	 * The guest tag
	 * 
	 * @return
	 */
	public boolean isGuest() {
		return getSubject() == null || getSubject().getPrincipal() == null;
	}

	/**
	 * The user tag
	 * 
	 * @return
	 */
	public boolean isUser() {
		return getSubject() != null && getSubject().getPrincipal() != null;
	}

	/**
	 * The authenticated tag
	 * 
	 * @return
	 */
	public boolean isAuthenticated() {
		return getSubject() != null && getSubject().isAuthenticated();
	}

	public boolean isNotAuthenticated() {
		return !isAuthenticated();
	}

	/**
	 * The principal tag
	 * 
	 * @param map
	 * @return
	 */
	public String principal(Map map) {
		String strValue = null;
		if (getSubject() != null) {

			// Get the principal to print out
			Object principal;
			String type = map != null ? (String) map.get("type") : null;
			if (type == null) {
				principal = getSubject().getPrincipal();
			} else {
				principal = getPrincipalFromClassName(type);
			}
			String property = map != null ? (String) map.get("property") : null;
			// Get the string value of the principal
			if (principal != null) {
				if (property == null) {
					strValue = principal.toString();
				} else {
					strValue = getPrincipalProperty(principal, property);
				}
			}

		}

		if (strValue != null) {
			return strValue;
		} else {
			return null;
		}
	}

	/**
	 * The hasRole tag
	 * 
	 * @param roleName
	 * @return
	 */
	public boolean hasRole(String roleName) {
		return getSubject() != null && getSubject().hasRole(roleName);
	}

	/**
	 * The lacksRole tag
	 * 
	 * @param roleName
	 * @return
	 */
	public boolean lacksRole(String roleName) {
		boolean hasRole = getSubject() != null
				&& getSubject().hasRole(roleName);
		return !hasRole;
	}

	/**
	 * The hasAnyRole tag
	 * 
	 * @param roleNames
	 * @return
	 */
	public boolean hasAnyRole(String roleNames) {
		boolean hasAnyRole = false;

		Subject subject = getSubject();

		if (subject != null) {

			// Iterate through roles and check to see if the user has one of the
			// roles
			for (String role : roleNames.split(",")) {

				if (subject.hasRole(role.trim())) {
					hasAnyRole = true;
					break;
				}

			}

		}

		return hasAnyRole;
	}

	/**
	 * The hasPermission tag
	 * 
	 * @param p
	 * @return
	 */
	public boolean hasPermission(String p) {
		return getSubject() != null && getSubject().isPermitted(p);
	}

	/**
	 * The lacksPermission tag
	 * 
	 * @param p
	 * @return
	 */
	public boolean lacksPermission(String p) {
		return !hasPermission(p);
	}

	@SuppressWarnings({ "unchecked" })
	private Object getPrincipalFromClassName(String type) {
		Object principal = null;

		try {
			Class cls = Class.forName(type);
			principal = getSubject().getPrincipals().oneByType(cls);
		} catch (ClassNotFoundException e) {

		}
		return principal;
	}

	private String getPrincipalProperty(Object principal, String property) {
		String strValue = null;

		try {
			BeanInfo bi = Introspector.getBeanInfo(principal.getClass());

			// Loop through the properties to get the string value of the
			// specified property
			boolean foundProperty = false;
			for (PropertyDescriptor pd : bi.getPropertyDescriptors()) {
				if (pd.getName().equals(property)) {
					Object value = pd.getReadMethod().invoke(principal,
							(Object[]) null);
					strValue = String.valueOf(value);
					foundProperty = true;
					break;
				}
			}

			if (!foundProperty) {
				final String message = "Property [" + property
						+ "] not found in principal of type ["
						+ principal.getClass().getName() + "]";

				throw new RuntimeException(message);
			}

		} catch (Exception e) {
			final String message = "Error reading property [" + property
					+ "] from principal of type ["
					+ principal.getClass().getName() + "]";

			throw new RuntimeException(message, e);
		}

		return strValue;
	}

	protected Subject getSubject() {
		return SecurityUtils.getSubject();
	}

	public static void main(String[] args) {
		GroupTemplate gt = new GroupTemplate();
		gt.registerFunctionPackage("shiro", new ShiroExt());

	}

}
 

© 著作权归作者所有

共有 人打赏支持
闲大赋

闲大赋

粉丝 1176
博文 95
码字总数 88056
作品 10
西城
架构师
私信 提问
加载中

评论(6)

刘光强
刘光强

引用来自“whvcse”的评论

能写一下spring boot怎么集成这个吗?
@Configuration
public MyConfig{
@Bean
public BeetlTemplateCustomize beetlTemplateCustomize(){
return new BeetlTemplateCustomize(){
public void customize(GroupTemplate groupTemplate){
}
}
}
}
在这个里面注册报错
package com.jync.chenggong.config;

import java.util.HashMap;
import java.util.Map;

import org.beetl.core.GroupTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.ibeetl.starter.BeetlTemplateCustomize;
import com.jync.chenggong.shiro.ShiroExt;

import lombok.extern.slf4j.Slf4j;

@Configuration
@Slf4j
public class MyBeetlConfig {
  @Value("${static.version}")
  private String version;

  @Autowired
  private ShiroExt shiroExt;
//  beetl.WEBAPP_EXT = com.jync.chenggong.utils.GlobalExt
//  beetl.IMPORT_PACKAGE=com.jync.chenggong.shiro.;
  @Bean
  public BeetlTemplateCustomize beetlTemplateCustomize() {
    return new BeetlTemplateCustomize() {
      public void customize(GroupTemplate groupTemplate) {
        try {
          groupTemplate.registerFunctionPackage("shiroExt",shiroExt);
          Map
whvcse
whvcse
能写一下spring boot怎么集成这个吗?
@Configuration
public MyConfig{
@Bean
public BeetlTemplateCustomize beetlTemplateCustomize(){
return new BeetlTemplateCustomize(){
public void customize(GroupTemplate groupTemplate){
}
}
}
}
在这个里面注册报错
小代码2016
小代码2016
springmvc beetl shiro 怎么做啊?要在哪里写配置啊?
水牛程序猿
水牛程序猿
有没有springmvc beetl shiro 的示例呀?
xiaoqqq
xiaoqqq
29非常好!
Java_weber
Java_weber
就是缺这个
JFinal权限控制后台--JFinal Authority

JFinal Authority 是 JFinal 权限控制后台 Jfinal后台 权限界面参考 @SyPro 采用 @JFinal @Jfinal-Ext @Shrio @EhCache @FastJSON @Gson @Easyui @Bootstrap @Beetl @Druid @EChat @HightCh......

12叔
2014/03/31
20.6K
7
哎。 求个职

本人在武汉,希望就在本市找份事做。 简历如下。 姓名: 刘某 年龄: 27 相关工作经验: 2年 联系电话: 18827070934 熟悉的框架,以及使用过的工具: 熟悉 java servlet api, jdbc api, sql,...

Motenai
2017/07/30
5.6K
59
shrio 会话 和 web会话 有什么区别?

是一样的吗?我查了一下好像不同的,那不同的话shrio怎么知道是同一个人的会话呢?还有和web集成的时候岂不是有多个会话(shrio的和web的)

554330833a
2016/10/17
569
5
如梦技术/JFinal-assets

说明 JFinal框架结合JFinal3.0 template、jsp、beetl、freemarker模版的js、css在线合并压缩插件! 结合CDN使用效果更佳哦~ 依赖 JFinal yuicompressor commons-io 使用 ###JFinal3.0 templ...

如梦技术
2015/11/06
0
0
Beetl 2.2.4 发布,java模板引擎

Beetl 2.2.4 发布,更新内容如下: 新增功能: #175:jodd3.3 MVC最新版本支持 #170:struts2 增加contentType配置 Bug修复: #178: 精度计算除法可能抛错bug修复 #177: 忽略客户端IO错误 #176...

闲大赋
2015/07/20
1K
19

没有更多内容

加载失败,请刷新页面

加载更多

Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
今天
1
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
2
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
4
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
4
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部