erp14-shiro-redis-svn
Posted 六叔的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了erp14-shiro-redis-svn相关的知识,希望对你有一定的参考价值。
一、JSON.parseArray(string,Menu.class);
二、shiro运行顺序:
当有访问请求过来时,请求会通过
myPermsFilter过滤器中的subject.isPermitted(perms[i] ) ——>
ErpRealm中的授权方法给当前用户授权——>
回到myPermsFilter过滤器中的subject.isPermitted(perms[i] ),判断请求是否合法
三、细颗粒度-方法级别
shiro启动注解
<!-- 启动shiro注解 -->
<bean
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
depends-on="lifecycleBeanPostProcessor" >
<!-- 默认使用JDK代理 ,如被代理类没有实现接口,必须使用下列配置开启 cglib代理 -->
<property name="proxyTargetClass" value="true" />
</bean>
<bean
class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager" />
</bean>
<!-- 对安全管理器 增强代码 , spring 后处理器 -->
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
在需要授权验证的方法上加注解:
@RequiresPermissions("采购确认")
四、细颗粒度-代码级别
@Override
public void listByPage() {
String type = getT1().getType();//1供应商 2客户
Subject subject = SecurityUtils.getSubject();
if (type.equals("2")) {
if (!subject.isPermitted("客户")) {
write("");
return;
}
}
if (type.equals("1")) {
if (!subject.isPermitted("供应商")) {
write("");
return;
}
}
if (!type.equals("1")&&!type.equals("2")) {
write("");
return;
}
super.listByPage();
}
五、redis的demo代码
package redisDemo;
import redis.clients.jedis.Jedis;
public class Test {
public static void main(String[] args) {
Jedis jedis = new Jedis("127.0.0.1");
jedis.set("xingming", "zhangsan2");
String string = jedis.get("xingming");
System.out.println(string);
jedis.del("xingming");
String string1 = jedis.get("xingming");
System.out.println(string1);
}
}
package com.itheima.utils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisUtils {
//创建连接池
private static JedisPoolConfig config;
private static JedisPool pool;
static{
config=new JedisPoolConfig();
config.setMaxTotal(30);// 设置连接的最大连接数
config.setMaxIdle(2);// 设置空闲时期连接的最大数,空闲着呢
pool=new JedisPool(config, "127.0.0.1", 6379);
}
//获取连接的方法
public static Jedis getJedis(){
return pool.getResource();
}
//释放连接
public static void closeJedis(Jedis j){
j.close();
}
}
六、redis整合项目
public List<Menu> getMenuListByEmpuuid(Long empuuid ){
String string = jedis.get("menuList"+empuuid);
if (string!=null) {
System.out.println("================================数据从redis中来=================================");
return JSON.parseArray(string,Menu.class);
}else {
System.out.println("============================数据从oracle来=========================");
List<Menu> list = menuDao.getMenuListByEmpuuid(empuuid);
jedis.set("menuList"+empuuid,JSON.toJSONString(list) );
return list;
}
}
@Override
public void updateRoleMenu(Long id, String nodesStr) {
Role role = roleDao.get(id);
String[] splits = nodesStr.split(",");
role.setMenus(new ArrayList<Menu>());
for (String menuid : splits) {
Menu menu = menuDao.get(menuid);
role.getMenus().add(menu);
}
List<Emp> list = role.getEmps();
for (Emp emp : list) {
jedis.del("menuList"+emp.getUuid());
}
}
以上是关于erp14-shiro-redis-svn的主要内容,如果未能解决你的问题,请参考以下文章