第一步:引入jar包
javax.servlet.jsp
jsp-api
2.2.1-b03
第二步:自定义标签类
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.jasig.cas.client.authentication.AttributePrincipal;
import org.springframework.web.servlet.tags.RequestContextAwareTag;
import com.goodidea.sso.dto.PrivilegesDto;
import com.goodidea.sso.dto.ResourcesDto;
import com.goodidea.sso.service.PrivilegesService;
public class PrivilegeTag extends RequestContextAwareTag{
private static final long serialVersionUID = 534416848523276042L;
private String menuAlias;
private String priAlias;
public String getMenuAlias() {
return menuAlias;
}
public void setMenuAlias(String menuAlias) {
this.menuAlias = menuAlias;
}
public String getPriAlias() {
return priAlias;
}
public void setPriAlias(String priAlias) {
this.priAlias = priAlias;
}
@Override
protected int doStartTagInternal() {
// TODO Auto-generated method stub
boolean result = false;
try {
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();
Map attributes = principal.getAttributes();
String username=(String) attributes.get("username");
PrivilegesService privilegesService= (PrivilegesService)this.getRequestContext().getWebApplicationContext().getBean("privilegesServiceImpl");
Set dto = privilegesService.findResourcesByUsername(username);
for (ResourcesDto resourcesDto : dto) {
if(this.menuAlias.equals(resourcesDto.getAlias())){
for (PrivilegesDto pdto : resourcesDto.getPrivileges()) {
if(this.priAlias.equals(pdto.getAlias())){
result = true;
}
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
result =false;
}
return result? eval_BODY_INCLUDE : SKIP_BODY;
}
}
第三步:创建tld标签,放入在web-inf下
1.0 1.1 privilege privilege com.goodidea.sso.core.PrivilegeTag empty menuAlias true true priAlias true true
第四:页面引用
<#assign p=JspTaglibs["/WEB-INF/tld/privilege.tld"] />
注意tld,如果不在web.xml上进行引入的话,就放在web-inf下,要不然会报找不到tld资源异常
补充知识:Springboot项目 freemarker 引入shiro 标签
springboot集成shiro权限过程略过
一、添加maven 依赖
net.mingsoft shiro-freemarker-tags0.1
二、注入FreeMarkerConfigurer,未指定templateLoaderPath时遇到过跳转到页面404问题
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() throws IOException, TemplateException {
FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
freeMarkerConfigurer.setTemplateLoaderPath("classpath:templates/");
freemarker.template.Configuration configuration = freeMarkerConfigurer.createConfiguration();
configuration.setDefaultEncoding("UTF-8");
//这里可以添加其他共享变量 比如sso登录地址
configuration.setSharedVariable("shiro", new ShiroTags());
freeMarkerConfigurer.setConfiguration(configuration);
return freeMarkerConfigurer;
}
三、shiro标签
1、session中读取登录人信息
<@shiro.principal/>
2、带有loginName属性的对象转换为Prinipal后保存在session
3、带有loginName属性的Json(个人使用的是FashJson对象)转换为Prinipal后保存在session,使用freemarker标签处理Json
<#assign loginInfo><@shiro.principal/>#assign>
<#assign data=loginInfo?eval>
用户:${data.loginName!""}
4、其他shiro标签使用
<@shiro.hasPermission name="权限编码">
...
@shiro.hasPermission>
以上这篇springboot 自定义权限标签(tld),在freemarker引用操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持考高分网。



