程序使用Shiro提供的FormAuthenticationFilter过滤器进行登录校验时,我们并不需要自己写登录校验,Shiro会帮我们完成。 今天在进行登录页面开发时,发现点击登录后,无法完成登录校验,Debug发现程序根本不会进到FormAuthenticationFilter的executeLogin方法,百思不得其解。 解决方法 解决方法就是:需要将loginUrl的访问权限设置为authc! 比如我们的loginUrl为/login,那么我们需要在Shiro的FilterChainDefinitionMap中加入: filterMap.put("/login", "authc"); 真是细节决定成败啊
shiro是一种权限认证框架,实现一个简单的登录鉴权: 1、控制器层: @Controller @RequestMapping("/blogger") public class BloggerController RequestMapping("/login") public String login(Blogger blogger,HttpServletRequest request){ //shiro doGetAuthorizationInfo(PrincipalCollection principals) { return null; } /** * 验证当前登录的用户 return authcInfo; }else{ return null; } } } 这里拿到用户名后查询数据库获取正确的blogger登录对象 ,构建SimpleAuthenticationInfo认证信息对象,身份判别结果Shiro都会反映在异常中: try { subject.login(token); //身份认证
一键领取预热专享618元代金券,2核2G云服务器爆品秒杀低至18元!云产品首单低0.8折起,企业用户购买域名1元起…
你还不会shiro吗? 前奏 shiro核心配置文件(rolesFilter可选)。 身份认证 多表登录源如何操作? 也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。 Shiro内置过滤器,可以实现权限相关的拦截器 常用的过滤器: anon: 无需认证(登录)可以访问 authc: 必须认证才可以访问 user: 如果使用rememberMe的功能可以直接访问 perm 对于这种问题,你可以配置多个releam,但是我觉得如果简单你可以在不同的登录接口下传递一个参数过来,这个参数就用session传递。 我用1.3.2版本没问题。
今天松哥就来和大家聊聊 Spring Boot 整合 Shiro 的话题! 这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。 setLoginUrl 表示指定登录页面。 setSuccessUrl 表示指定登录成功页面。 接下来的 Map 中配置了路径拦截规则,注意,要有序。 ; } } 测试时,首先访问 /hello 接口,由于未登录,所以会自动跳转到 /login 接口: ? 然后调用 /doLogin 接口完成登录: ? ,默认的跳转路径 第四行表示开启 shiro 第五行表示登录成功的跳转页面 第六行表示登录页面 配置 ShiroConfig @Configuration public class ShiroConfig
今天松哥就来和大家聊聊 Spring Boot 整合 Shiro 的话题! 这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。 setLoginUrl 表示指定登录页面。 setSuccessUrl 表示指定登录成功页面。 接下来的 Map 中配置了路径拦截规则,注意,要有序。 ; }} 测试时,首先访问 /hello 接口,由于未登录,所以会自动跳转到 /login 接口: ? 然后调用 /doLogin 接口完成登录: ? ,默认的跳转路径 第四行表示开启 shiro 第五行表示登录成功的跳转页面 第六行表示登录页面 配置 ShiroConfig @Configurationpublic class ShiroConfig
本讲主要内容: 1:shiro对访问URL可使用通配符进行匹配 2:shiro标签的使用 3:shiro会话的机制 URL匹配方式: 演示: 现在shiro.ini配置的路径为: ? 直接访问/admin ? Ok.没问题。 那么我们访问/admin1呢? ? 就不行了。 修改shiro.ini配置文件。 ? 重启后,再次访问/admin1就拦截登录页面。 ? 演示: 在使用shiro标签的时候,需要在对应页面引入支持shiro标签的标签库:、 当用户有admin角色的时候在success.jsp页面显示【欢迎admin角色的用户登录!!】 如果用户不是admin角色的时候显示【欢迎登陆】 在页面处理: ? 非admin角色(xiaotang=123456)登陆后: ? 在使用admin角色(kaigejava=123456)登陆后 ? 演示二: 使用xiaotang=123456这个用户登录后: ? 显示用户身份信息的: 如下图: ? Shiro的会话机制 Shiro会话机制可以使用servlet的会话机制。
今天遇到一个项目问题,shiro如何实现一个账户同一时刻只有一session存在的问题,找了几篇文章,在这里就把核心的代码理了理,具体情况如下。 > 接下来你就应该在你的realm中添加下面的代码,这里主要是为了判断用户登录的账户是否已经登录过了。 接下来你就应该在realm中得到shiro 的缓存中得到所有的已经登录的账户,进行判断当前用户是否已经登录 //apache shiro获取所有在线用户 Collection<Session> = String.valueOf(session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY));//获得session中已经登录用户的名字 if(username.equals(loginUsername)){ //这里的username也就是当前登录的username session.setTimeout
当我们将/**设置为authc,即过滤所有的url,必须有登录权限,这个时候当登录成功后,浏览器有时候就会弹出一个下载框,下载“favicon.ico” ? Paste_Image.png 解决方法 只需要在Shiro的FilterChainDefinitionMap中加入/favicon.ico":"anon"即可!
这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。 这里的认证表示用户名必须是 javaboy ,用户密码必须是 123 ,满足这样的条件,就能登录成功! setLoginUrl 表示指定登录页面。 setSuccessUrl 表示指定登录成功页面。 接下来的 Map 中配置了路径拦截规则,注意,要有序。 ; }} 测试时,首先访问 /hello 接口,由于未登录,所以会自动跳转到 /login 接口: ? 然后调用 /doLogin 接口完成登录: ? ,默认的跳转路径 第四行表示开启 shiro 第五行表示登录成功的跳转页面 第六行表示登录页面 配置 ShiroConfig @Configurationpublic class ShiroConfig
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 projects/cas),也可以参考这篇文章(https://www.ibm.com/developerworks/cn/opensource/os-cn-cas/) spring security支持cas,shiro 也支持cas,我最近也在学习shiro,看到一个不错的github项目(shiro实现cas功能),分享给需要的朋友: https://github.com/coder-huang/sso-shiro-cas spring security实现cas则可以参考下面的官网的demo: https://github.com/spring-projects/spring-security,参考代码在samples目录下面
遗留问题解答 上篇遗留问题:session过期后,我们再请求,shiro是如何处理并跳转到登录页的? 回答这个问题之前,我们先看看另外一个问题: 上篇博文中讲到了登录认证成功后会将subject的authenticated设置成true,表示当前subject已经被认证过了,但是只是当前subject; 归纳下这个问题:shiro是如何保存当前会话认证状态的,是上述中的某种实现方式,还是shiro有另外的实现方式 shiro是如何保存会话认证状态的 每次请求都会生成新的subject,如果我们把认证状态只放到 session过期后,我们再请求,shiro是如何处理并跳转到登录页的 如果我们明白了上个问题,那么这个问题就很好理解了。 shiro源码篇 - shiro认证与授权,你值得拥有 认证通过Filter实现,anon表示匿名访问,不需要认证,一般就是针对游客可以访问的资源,而authc则表示需要登录认证; 我们所有的请求一般由
ssm整合shiro框架,对用户的登录操作进行认证和授权,目的很纯粹就是为了增加系统的安全线,至少不要输在门槛上嘛。 这几天在公司独立开发一个供公司内部人员使用的小管理系统,客户不多但是登录一直都是简单的校验查询,没有使用任何安全框架来保驾护航,下午终于拿出以前的手段来完善了一下,将shiro安全框架与ssm整合使用的步骤和大家分享一下 -- 登录成功后要跳转的连接(此处已经在登录中处理了) --> 16 <! -- 可匿名访问路径,例如:验证码、登录连接、退出连接等 --> 27 /auth/login = anon 28 <! 很长年间没用shiro安全框架了,原理忘得都差不多了,但是驾驭它还是没问题的,如果哪儿写的不对的,希望各位指教,尽管我脾气很爆,哈哈哈。
目录 问题1. SecurityUtils.getSubject().getPrincipal()返回类型; 问题2. Shiro又是如何区分不同用户的身份的? 问题1. 问题2. Shiro如何利用session保持会话 先说结果: 若使用Shiro默认的session会话管理:用户登录–>创建session–>创建cookie–>用户二次访问–>从cookie中读取sessionId –>根据sessionId取得用户身份 若使用自定义的session会话管理,适用于前后分离(但需要解决跨域cookie禁止问题):用户登录,同时携带sId–>检查到sId参数,使用自定义getsessionId
3、最好有Spring基础 可以先看看这两篇文章,按照这2篇文章的内容做一遍: Spring Boot Shiro 权限管理 CAS单点登录 首先看一下下面这张图: 第一个流程是单纯使用Shiro PS:流程图急急忙忙画的,整体上应该没有什么问题,具体细节问题还请大家留言指正。 如果你只是打算用到你的Spring Boot项目中,那么看着如下配置完成便可。 "; // 登录地址 public static final String loginUrl = casLoginUrl + "? (loginUrl);// 我们选择认证失败后再打开登录页面 return casFilter; } /** * ShiroFilter 权限认证##################"); //获取当前登录输入的用户名,等价于(String) principalCollection.fromRealm(getName())
SHIRO-682的修复了spring框架下uri = uri + ‘/’ 绕过Shiro防护的问题。然后下面的描述则清晰得描述了造成改错误的原因。 1.anon为匿名拦截器,不需要登录就能访问,一般用于静态资源,或者移动端接口 2.authc为登录拦截器,需要登录认证才能访问的资源。 从而实现对URL的访问控制,URL路径表达式通常为ANT格式。如下配置,访问 /index.html主页的时候,Shiro将不会对其进行登录判断,anon拦截器不需要登录就能进行访问。 而对于/user/xiaoming 等 /user/xiaogang等接口,authc拦截器将会对其进行登录判断,有登录认证才能访问资源。 hello/1接口,可以看到被authc拦截器拦截了,将会跳转到登录接口进行登录。
前言 这里我先要说明一下,我们的项目架构是Springboot+Shiro+Ehcache+ThymeLeaf+Mybaits,在这个基础上,我们再加入了CAS单点登录,虽然前面的框架看着很长,但是和单点登录相关的核心架构其实就是 dependency再黏贴到pom中去,不能直接修改版本号,否则会出现引入不成功的问题,这个问题卡了我一下午,坑啊! 加入单点登录的配置 如果你在你的Springboot项目中集成过shiro框架,应该对两个自定义的类不陌生,一个是myShiroConfig另一个是myShiroRealm,这两个类其实就是用户自定义的 Shiro的设置类和登录验证获取权限的管理类,在这里我将不再赘述该类如何使用,直接上集成了CAS的这两个类: 首先是设置类: import com.dhcc.pa.domain.SPermission; ,下一篇我们讲两个小的内容: 修改CAS服务端的默认登录页 如何登出CAS客户端 source:jasoncool.github.io/2017/12/04/Springboot集成Shiro和Cas实现单点登录
车票 面试题1:你来简单介绍一下Shiro框架吧? 追问1:Shiro常见的权限控制方式有哪几种? 追问2:你还知道Shiro的其他组件么? 相信很多朋友简历中都写了熟练使用Shrio框架,这也是我们做单点登录经常会用到的途径之一。既然写上了,就要做好被问到的准备,一般会问哪些呢? 其实,除了你使用过程中出现的一些实际操作遇到的BUG以外,以下问题我劝你都了解一下,这是用好Shrio的同学都应该了解的内容,淦(juan)! 面试题1:你来简单介绍一下Shiro框架吧? Shiro从Realm获取安全数据(如用户,角色,权限);也就是说SecurityManager要验证用户身份或操作权限,需要从Realm获取相应数据来判断(用户是否能登录,是否拥有什么权限等)。 : 管理session的生命周期(可以实现单点登录) CacheManager: 缓存管理器 Cryptography: 密码管理模块 ---- 面试题2:说一下Shiro认证和授权过程 认证流程 首先调用
、请求乱码解决 :https://blog.51cto.com/wyait/2125708 shiro并发登陆人数控制(超出登录用户最大配置数量,清理用户)功能; 解决父子页面判断用户未登录之后,重定向到页面中嵌套显示登录界面问题 ; 解决ajax请求,判断用户未登录之后,重定向到登录页面问题; 解决完成了功能1,导致的session有效时间冲突问题等。 问题 图片或静态资源直接放在wyait.picpath=D:/demo-images/目录下,访问:http://127.0.0.1:8077/0.jpg,会报错: [2018-04-08 22:05: 20180422版本更新内容 优化更新用户时,记录操作用户id; 优化用户列表默认排序; 优化开通用户后,再次添加用户,上次操作数据未清除问题; 优化多设备同时登陆时,有效时间内验证码冲突问题; 优化登录失败时停止短信验证码倒计时功能 20180606版本更新内容 新增shiro权限注解; 请求乱码问题解决; 统一异常处理; 页面操作细节优化。
腾讯云号码认证(NVS)集成了三大运营商特有的网关取号、验证能力,自动通过底层数据网关和短信网关识别本机号码,在不泄漏用户信息的前提下,安全、快速地验证用户身份。NVS提供一键登录、本机校验两大功能,实现一键免密注册、登录、校验,可提升用户使用体验。
扫码关注云+社区
领取腾讯云代金券