一 思路
freemark实现控制前端的操作的入口(控制了其显示与否),shiro把控了后端的操作入口。
二 操作配置
2.1 配置application
2.2 配置文件
package com.debug.pmp.server.config;
import com.debug.pmp.server.shiro.ShiroVariable;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
//Freemarker配置
@Configuration
public class FreemarkerConfig {
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer(ShiroVariable shiroVariable){
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPath("classpath:/templates");
Map<String, Object> variables = new HashMap<>(1);
variables.put("shiro", shiroVariable);
configurer.setFreemarkerVariables(variables);
Properties settings = new Properties();
settings.setProperty("default_encoding", "utf-8");
settings.setProperty("number_format", "0.##");
configurer.setFreemarkerSettings(settings);
return configurer;
}
}
2.3 shiro的变量
作用是:判断当前登录的主题是否具有制定的权限
package com.debug.pmp.server.shiro;/**
* Created by Administrator on 2019/8/4.
*/
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Component;
/**
* 推送给前端使用的shiro对象变量
* @Author:debug (SteadyJack)
* @Date: 2019/8/4 22:29
**/
@Component
public class ShiroVariable {
/**
* 判断当前登录用户(主体)是否有 指定的权限
* @param permission 指定的权限
* @return
*/
public Boolean hasPermission(String permission){
Subject subject=SecurityUtils.getSubject();
/*if (subject!=null && subject.isPermitted(permission)){
return true;
}
return false;*/
return (subject!=null && subject.isPermitted(permission))? true : false;
}
}
2.4 html页面
当执行<#if shiro.hasPermission("sys:user:save")>时候,就会调用ShiroVariable类中的方法,来判断是否具有权限。
三 前后端分离
用户登录成功后,可以将用户所属的权限集合返回给前端,前端做判断处理。