软件编程
位置:首页>> 软件编程>> java编程>> springboot 自定义权限标签(tld),在freemarker引用操作

springboot 自定义权限标签(tld),在freemarker引用操作

作者:Kirk_  发布时间:2023-11-23 06:20:15 

标签:springboot,权限,freemarker

第一步:引入jar包


   <dependency>
     <groupId>javax.servlet.jsp</groupId>
     <artifactId>jsp-api</artifactId>
     <version>2.2.1-b03</version>
   </dependency>

第二步:自定义标签类


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;

/**
*
* @ClassName: PrivilegeTag
* @Description: 权限标签类
* @author lsg
* @date 2017年9月12日 下午5:36:01
*
*/
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<String, Object> attributes = principal.getAttributes();
     String username=(String) attributes.get("username");
     PrivilegesService privilegesService= (PrivilegesService)this.getRequestContext().getWebApplicationContext().getBean("privilegesServiceImpl");
     Set<ResourcesDto> 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下

springboot 自定义权限标签(tld),在freemarker引用操作


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
 <tlibversion>1.0</tlibversion>
 <jspversion>1.1</jspversion>
 <shortname>privilege</shortname>
 <tag>
   <name>privilege</name>
   <tagclass>com.goodidea.sso.core.PrivilegeTag</tagclass>
   <bodycontent>empty</bodycontent> <!--这里如果设为empty,则无body-->
   <attribute>
     <name>menuAlias</name>
     <required>true</required>
     <rtexprvalue>true</rtexprvalue>
   </attribute>
   <attribute>
     <name>priAlias</name>
     <required>true</required>
     <rtexprvalue>true</rtexprvalue>
   </attribute>
 </tag>
</taglib>


第四:页面引用

<#assign p=JspTaglibs["/WEB-INF/tld/privilege.tld"] />

注意tld,如果不在web.xml上进行引入的话,就放在web-inf下,要不然会报找不到tld资源异常

补充知识:Springboot项目 freemarker 引入shiro 标签

springboot集成shiro权限过程略过

一、添加maven 依赖


<dependency>
<groupId>net.mingsoft</groupId>
<artifactId>shiro-freemarker-tags</artifactId>
<version>0.1</version>
</dependency>

二、注入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

<shiro:principal property="loginName" />

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>

来源:https://blog.csdn.net/cutterwolf/article/details/78085808

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com