扫码关注官方订阅号
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
1、首先给你个demo。
/** * Created by projack * 权限认证服务 */ public class CmsShiroRealm extends AuthorizingRealm { @Autowired private UserService userService; @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); //获取当前登录的用户名 String name = (String) super.getAvailablePrincipal(principals); List<String> roles = new ArrayList<String>(); List<String> permissions = new ArrayList<String>(); User user = userService.findByName(name); if(user != null){ for(Role role : user.getRoles()){ roles.add(role.getName()); } Set<Permission> pmssSet = userService.getPermissionsByUserId(user.getUserId()); for(Permission pms : pmssSet){ if(!StringUtils.isEmpty(pms.getPermission())){ permissions.add(pms.getPermission()); } } }else{ throw new AuthorizationException(); } //给当前用户设置角色 info.addRoles(roles); //给当前用户设置权限 info.addStringPermissions(permissions); return info; } /** * 认证信息.(身份验证),登录时调用 * @param token * @return */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { //获取用户的输入的账号. String username = (String)token.getPrincipal(); //通过username从数据库中查找 User对象,如果找到,没找到. //实际项目中,这里可以根据实际情况做缓存,如果不做,Shiro自己也是有时间间隔机制,2分钟内不会重复执行该方法 User user = userService.findByName(username); if(user == null){ return null; } /* * 获取权限信息:这里没有进行实现, * 请自行根据User,Role,Permission进行实现; * 获取之后可以在前端for循环显示所有链接; */ //user.setPermissions(userService.findPermissions(user)); SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user.getName(),user.getPassWord(),user.getNickName()); return authenticationInfo; } }
2、Shiro根本就不用你的HttpSevletRequest和Response对象,Shiro自身维护了自己的Session,在Shrio的包下面。
分享一个 Shiro 完整权限控制Demo
楼主问题你已经定位到这里了。还在想着有机率会出现Bug?看你定位代码的程度已经非常深入了,这里就是简单的在request中拿个值。拿不到这显示是在Request中没有该值。这与shiro没有任何关系。
request
Request
shiro
图 你看这张图,你定位到这里来了,为什么没有查看一下request中的参数呢?就是那个@10319对象。
@10319
你截图里,能拿到的url是127.0.0.1,不能拿到的url是localhost,不知是不是和这个有关
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
1、首先给你个demo。
2、Shiro根本就不用你的HttpSevletRequest和Response对象,Shiro自身维护了自己的Session,在Shrio的包下面。
分享一个 Shiro 完整权限控制Demo
楼主问题你已经定位到这里了。还在想着有机率会出现Bug?看你定位代码的程度已经非常深入了,这里就是简单的在
request中拿个值。拿不到这显示是在Request中没有该值。这与shiro没有任何关系。图 你看这张图,你定位到这里来了,为什么没有查看一下
request中的参数呢?就是那个@10319对象。你截图里,能拿到的url是127.0.0.1,不能拿到的url是localhost,不知是不是和这个有关