viewabletag.java

来自「一个关于tlms的一个小程序 看看能否帮助到别人」· Java 代码 · 共 75 行

JAVA
75
字号
package com.szmx.component.security.acegipro.taglibs.authz;

import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.SecurityConfig;
import org.acegisecurity.GrantedAuthorityImpl;
import org.acegisecurity.ConfigAttributeDefinition;

import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.JspException;

import com.szmx.framework.spring.context.ApplicationContextUtil;
import com.szmx.framework.base.web.BaseAction;
import com.szmx.component.security.acegipro.intercept.web.RdbmsBasedFilterInvocationDefinitionMap;

/**
 * ================================================================
 * Copyright 2006 szmx
 * <p/>
 * Change Revision
 * ---------------------------------------------------------------
 * Date              Author            Remarks
 * Apr 3, 2006       BZhang     Create class com.szmx.component.security.acegipro.taglibs.authz.ViewableTag
 * ================================================================
 */
public class ViewableTag extends TagSupport {
    private String resUrl;
    private Boolean dsdEnabled = Boolean.FALSE;      // default = false;

    public void setResUrl(String resUrl) {
        this.resUrl = resUrl;
    }

    public void setDsdEnabled(String dsdEnabled) {
        this.dsdEnabled = Boolean.valueOf(dsdEnabled);
    }

    public int doStartTag() throws JspException {
        if (checkViewable()) {
            return Tag.EVAL_BODY_INCLUDE;
        } else {
            return Tag.SKIP_BODY;
        }
    }

    private GrantedAuthority getCurrentGrantedAuthority() {
        String roleName = (String) pageContext.getSession().getAttribute(BaseAction.CURRENT_GRANTED_AUTHORITY);
        return (roleName != null) ? new GrantedAuthorityImpl(roleName) : null;
    }

    private GrantedAuthority[] getGrantedAuthorities() {
        return SecurityContextHolder.getContext().getAuthentication().getAuthorities();
    }

    private boolean checkViewable() {
        RdbmsBasedFilterInvocationDefinitionMap definitionMap = (RdbmsBasedFilterInvocationDefinitionMap)
                 ApplicationContextUtil.getBean("rdbmsBasedFilterInvocationDefinitionMap");
        if (dsdEnabled.booleanValue()) {
            GrantedAuthority authority = getCurrentGrantedAuthority();
            ConfigAttributeDefinition def = definitionMap.lookupAttributes(resUrl);
            return (def != null) && def.contains(new SecurityConfig(authority.getAuthority()));
        } else {
            GrantedAuthority[] authorities = getGrantedAuthorities();
            for (int i=0; i<authorities.length; i++) {
                ConfigAttributeDefinition def = definitionMap.lookupAttributes(resUrl);
                if ((def != null) && def.contains(new SecurityConfig(authorities[i].getAuthority())) ) {
                    return true;
                }
            }
        }
        return false;
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?