背景:项目中需要进行按钮的权限控制(项目中本来就已经集成了权限控制)。
查看之前的代码,发现运用的是 freemarker 自定义函数。
自己研究了一番,记录一下。
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.sunshine.dcda.system.service.model.SystemResourceVo;
import freemarker.template.TemplateMethodModelEx;
import freemarker.template.TemplateModelException;
@Configuration
public class FtlCheckPermission implements TemplateMethodModelEx
{
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public Object exec(List args)
throws TemplateModelException
{
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String rescCode = args.get(0).toString();
List<SystemResourceVo> rolePermission = (List<SystemResourceVo>)request.getSession().getAttribute("userButtons");
if(null == rolePermission || rolePermission.size() < 1){
return false;
}
for (SystemResourceVo resource : rolePermission) {
if (rescCode.equals(resource.getRescCode())) {
return true;
}
}
return false;
}
}
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FreeMarkerConfig {
@Autowired
private freemarker.template.Configuration configuration;
@Autowired
protected FtlCheckPermission checkPermission;
@Value("${projectName}")
private String projectName;
@Value("${BasePath}")
private String BasePath;
// Spring 初始化的时候加载配置
@PostConstruct
public void setConfigure() throws Exception {
// 加载html的资源路径
configuration.setSharedVariable("projectName", projectName);
configuration.setSharedVariable("BasePath", BasePath);
configuration.setSharedVariable("checkPermission", checkPermission); //权限操作
}
}
前端代码中只要这样引用就ok了。其中 res_doi_btn_add_appdel 对应的是相应的资源
<#if checkPermission('res_doi_btn_add_appdel')>
<button type="button" class="btn btn-warning btn-sm" οnclick="delDOIApplication()">
<span class="glyphicon "></span> 删除
</button>
</#if>