博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Apach shiro】spring 整合Apache shiro
阅读量:5153 次
发布时间:2019-06-13

本文共 5062 字,大约阅读时间需要 16 分钟。

1、新建application-shiro.xml

#shiro.properties shiro.activeRealm = myRealm/static/**=anon/scripts/**=anon/getVerifyImage=anon/login=anon/logout=logout#/**=authc

 

2、在web.xml 添加配置

shiroFilter
org.springframework.web.filter.DelegatingFilterProxy
targetFilterLifecycle
true
shiroFilter
/*

3、创建 MyRealm 类

package com.smile.azxx.shiro;import com.smile.azxx.entity.sysmng.User;import com.smile.azxx.service.sysmng.UserService;import org.apache.commons.lang.StringUtils;import org.apache.shiro.SecurityUtils;import org.apache.shiro.authc.*;import org.apache.shiro.authz.AuthorizationException;import org.apache.shiro.authz.AuthorizationInfo;import org.apache.shiro.authz.SimpleAuthorizationInfo;import org.apache.shiro.cache.Cache;import org.apache.shiro.realm.AuthorizingRealm;import org.apache.shiro.subject.PrincipalCollection;import org.apache.shiro.subject.SimplePrincipalCollection;import org.hibernate.service.spi.ServiceException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import java.util.List;import java.util.Set;/** * Created by smile on 2018/4/6. */public class MyRealm extends AuthorizingRealm {    private Logger logger = LoggerFactory.getLogger(getClass());    @Autowired    private UserService userService;    /**     * 为当前登陆成功的用户授予权限和角色,已经登陆成功了     */    @Override    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {        // 根据用户配置用户与权限        if (principals == null) {            throw new AuthorizationException("PrincipalCollection method argument cannot be null.");        }        String username = (String) principals.getPrimaryPrincipal(); //获取用户名        SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();        List
roles = userService.getRoles(username); if(roles!=null&&roles.size()>0){ authorizationInfo.setRoles((Set
) roles); authorizationInfo.setStringPermissions((Set
) userService.getResource(roles)); } return authorizationInfo; } /** * 认证回调函数,登录时调用. */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException { UsernamePasswordToken token = (UsernamePasswordToken) authcToken; String userName = token.getUsername(); logger.info("请求用户名:"+userName); // 清空权限缓存,保证每次登陆都重新同步缓存至最新 SimplePrincipalCollection key = null; Cache
cache = super.getAuthorizationCache(); for (Object k : cache.keys()) { if (k.toString().equals(userName)) { key = (SimplePrincipalCollection) k; break; } } if (key != null) { cache.remove(key); }// logger.info("doGetAuthenticationInfoAuthenticationToken............username=" + userName); if (userName != null && !"".equals(userName)){ User user = null; try { user = userService.getUserByName(userName); logger.info("username=" + userName + ";load=" + (user == null ? "false" : "true")); } catch (ServiceException e) { e.printStackTrace(); } if(user!=null && StringUtils.isNotBlank(user.getUsername())){ SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user.getUsername(),user.getPassword(),getName()); SecurityUtils.getSubject().getSession() .setAttribute("c_user", user); return authenticationInfo; }else { throw new UnknownAccountException("该账号未注册,请尝试其他账号!"); } } return null; }}

 

转载于:https://www.cnblogs.com/warmsmile/articles/9149152.html

你可能感兴趣的文章
关于学习Python的一些心得
查看>>
两个整数集合的交集 ———— 腾讯2014软件开发笔试题目
查看>>
usaco3.2
查看>>
web开发的一些材料
查看>>
【BZOJ1058】[ZJOI2007]报表统计 STL
查看>>
maven 仓库配置 pom中repositories属性
查看>>
memcached telnet命令
查看>>
hdu1520(树形dp入门)
查看>>
时间的输入
查看>>
算法2(二分查找法)
查看>>
DevExpress.Build.v14.2
查看>>
简单的图论问题【湖南省赛】
查看>>
洛谷P2698 花盆Flowerpot【单调队列】
查看>>
三级联动
查看>>
二维高斯滤波器(gauss filter)的实现
查看>>
C/C++ 常量的定义与应用(编程中的常量)
查看>>
正定矩阵(definite matrix)
查看>>
概率空间
查看>>
此文件中的某些文本格式可能已经更改,因为它已经超出最多允许的字体数。关闭其他文档再试一次可能有用。...
查看>>
COMP3608 – Introduction to Artificial Intelligence
查看>>