为了账号安全,请及时绑定邮箱和手机立即绑定

beetl 和 shrio 结合

标签:
Java

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());

	}

}


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消