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 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦