JFinal 에 Shiro 플러그 인 기능 추가, Shiro 모든 주석 지원 - HTTL 편

5065 단어 shirojFinalhttl
HTTL 템 플 릿 엔진 을 사용 하기 때문에 Shiro 와 HTTL 을 통합 하고 싶 습 니 다.
구체 적 으로 다음 과 같 습 니 다. 이 애 교 는 JFinal 에 Shiro 플러그 인 기능 을 추가 하고 Shiro 의 모든 주 해 를 지원 합 니 다. - 실현 편 과 같 습 니 다.
package com.jfinal.ext.plugin.shiro;

import java.util.concurrent.ConcurrentMap;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;


/**
 *    Shiro     HTTL   。
 *
 * @author dafei
 */
public class ShiroKit {

	/**
	 *       action  actionpath    shiro    。
	 */
	private static ConcurrentMap<String, AuthzHandler> authzMaps = null;


	private static final String NAMES_DELIMETER = ",";

	/**
	 *      
	 */
	private ShiroKit() {}

	static void init(ConcurrentMap<String, AuthzHandler> maps) {
		authzMaps = maps;
	}

	static AuthzHandler getAuthzHandler(String actionKey){
		/*
		if(authzMaps.containsKey(controllerClassName)){
			return true;
		}*/
		return authzMaps.get(actionKey);
	}

	/**
	 *    Subject
	 *
	 * @return Subject
	 */
	protected static Subject getSubject() {
		return SecurityUtils.getSubject();
	}

	/**
	 *              ?,    lacksRole     
	 *
	 * @param roleName
	 *               
	 * @return      :true,  false
	 */
	public static boolean hasRole(String roleName) {
		return getSubject() != null && roleName != null
				&& roleName.length() > 0 && getSubject().hasRole(roleName);
	}

	/**
	 *  hasRole      ,              。
	 *
	 * @param roleName
	 *               
	 * @return       :true,  false
	 */
	public static boolean lacksRole(String roleName) {
		return !hasRole(roleName);
	}

	/**
	 *                   。
	 *
	 * @param roleNames
	 *                
	 * @return   :true,  false
	 */
	public static boolean hasAnyRoles(String roleNames) {
		boolean hasAnyRole = false;
		Subject subject = getSubject();
		if (subject != null && roleNames != null && roleNames.length() > 0) {
			// Iterate through roles and check to see if the user has one of the
			// roles
			for (String role : roleNames.split(NAMES_DELIMETER)) {
				if (subject.hasRole(role.trim())) {
					hasAnyRole = true;
					break;
				}
			}
		}
		return hasAnyRole;
	}

	/**
	 *                 。
	 *
	 * @param roleNames
	 *                
	 * @return   :true,  false
	 */
	public static boolean hasAllRoles(String roleNames) {
		boolean hasAllRole = true;
		Subject subject = getSubject();
		if (subject != null && roleNames != null && roleNames.length() > 0) {
			// Iterate through roles and check to see if the user has one of the
			// roles
			for (String role : roleNames.split(NAMES_DELIMETER)) {
				if (!subject.hasRole(role.trim())) {
					hasAllRole = false;
					break;
				}
			}
		}
		return hasAllRole;
	}

	/**
	 *               ,    lacksPermission     
	 *
	 * @param permission
	 *               
	 * @return     :true,  false
	 */
	public static boolean hasPermission(String permission) {
		return getSubject() != null && permission != null
				&& permission.length() > 0
				&& getSubject().isPermitted(permission);
	}

	/**
	 *  hasPermission      ,           ,    。
	 *
	 * @param permission
	 *               
	 * @return     :true,  false
	 */
	public static boolean lacksPermission(String permission) {
		return !hasPermission(permission);
	}

	/**
	 *         。         ,   user       。 notAuthenticated    
	 *
	 * @return       :true,  false
	 */
	public static boolean authenticated() {
		return getSubject() != null && getSubject().isAuthenticated();
	}

	/**
	 *        , authenticated     。 guest      ,          。。
	 *
	 * @return         :true,  false
	 */
	public static boolean notAuthenticated() {
		return !authenticated();
	}

	/**
	 *            。 guset    。
	 *
	 * @return   :true,   false
	 */
	public static boolean user() {
		return getSubject() != null && getSubject().getPrincipal() != null;
	}

	/**
	 *          “  ”,    (     )   。 user    
	 *
	 * @return   :true,  false
	 */
	public static boolean guest() {
		return !user();
	}

	/**
	 *         ,         。
	 * @return       
	 */
	public String principal(){
		if (getSubject() != null) {
            // Get the principal to print out
            Object principal = getSubject().getPrincipal();
            return principal.toString();
        }
		return "";
	}
}

httl. properties 에 코드 를 추가 합 니 다.
import.methods+=com.jfinal.ext.plugin.shiro.ShiroKit

집적 이 끝 났 는데 어떻게 사용 합 니까?
<!--#if(hasRole("root"))-->
	<td>
	<a href="school/selectSchool?school_id=${school.id}&school_name=${school.name}&callback_action=/class/index" class="btn btn-large btn-block btn-success">    </a>
	</td>
<!--#end-->


<!--#if(hasPermission("card:confirm"))-->
		<button class="btn btn-primary btn-huge btn-wide"  tabindex="3">  </button>
<!--#end-->

쓰기 에 괜찮다.
----------------------------------------------------------
 회사 명  마야 우

좋은 웹페이지 즐겨찾기