shiro控制不同模块登录地址
http://www.oschina.net/code/snippet_170632_54885
原文
http://blog.csdn.net/lhacker/article/details/20450855
很多时候,我们需要做到,当用户登录成功后,跳转回登录前的页面。如果用户是点击"登录"链接去到登录页面进行登录的,我们很容易跟踪用户的登录前的页面。比如,在"登录"链接后加一个url参数,如:http://www.xxx.com/login.html?url=http://www.xxx.com/xx.html,这个url就是当前页面。用户浏览不同页面,"登录"链接后面的url跟着改变。这样,跳转到登录页面时都会带有上一个页面的url作为参数,登录后也很容易拿到这个参数进行重定向到登录前的页面。
但当我们用配置/xxx.html=authc这种方式,限制用户访问/xxx.html连接时必须是认证过的用户,否则shiro的filter将会重定向到登录页面,上面的方法应当好处理了。不过shiro在跳转前有记录跳转前的页面。前没有认证的用户请求需要认证的链接时,shiro在跳转前会把跳转过来的页面链接保存到session的attribute中,key的值叫shiroSavedRequest,我们可以能过WebUtils类拿到。
当用户登录成功后,可能通过String url = WebUtils.getSavedRequest(request).getRequestUrl();,拿到跳转到登录页面前的url,然后redirect到这个url。其实我们可以看看这个方法的源码:
public static SavedRequest getSavedRequest(ServletRequest request) {
SavedRequest savedRequest = null;
Subject subject = SecurityUtils.getSubject();
Session session = subject.getSession(false);
if (session != null) {
savedRequest = (SavedRequest) session.getAttribute(SAVED_REQUEST_KEY);
}
return savedRequest;
}
从session中拿到SaveRequest。不过值得注意的是,
这个SaveRequest是在用户通过上面方式跳转登录时shiro才会保存,并且不会改变,除非下一次跳转再次发生。并不是每一个请求,shiro都会把上一个请求保存到session中。所以,不能通过WebUtils.getSavedRequest(request)在任何地方调用来拿到上一个页面的请求。这个方法的调用,更应该是在用户登录成功后,重定向到页面时使用。
分享到:
相关推荐
正确配置 Shiro 的过滤器链定义,确保只有需要认证的URL会被保存,这样才能在用户登录后跳转到他们最初尝试访问的页面。在实际应用中,根据项目的具体需求,可以结合这两种方法,以提供更优质的用户体验。
4. 验证成功后,Shiro创建Subject并登录,将用户信息保存在会话中。 5. 如果验证失败,Shiro会抛出异常,控制器捕获异常并返回错误信息。 6. 登录成功后,用户可以访问受保护的资源,Shiro会根据URL和用户角色进行...
当用户登录成功后,服务器返回一个JWT,前端保存该令牌并在后续请求中携带。Shiro可以通过JWT插件进行解析和验证。 4. **拦截器或过滤器**:在SpringBoot中,可以创建一个Shiro拦截器或过滤器,对每个请求进行检查...
在这个项目中,登录和注销功能已经实现了基于Shiro的权限控制,确保用户只有在正确验证身份后才能访问特定资源。 描述中提到"将focus.sql在Mysql数据库执行",意味着项目依赖于MySQL数据库来存储用户信息和权限数据...
理解Shiro的基本概念如Subject、Realms、Session管理等,以及如何通过Shiro配置实现用户登录、授权等功能,对于修改默认跳转页面至关重要。 3. **Spring Boot**:作为若依的底层基础,Spring Boot简化了Spring应用...
- 用户被重定向到登录后的页面,后续访问会受到 Shiro 的权限控制。 4. **JSP 实现**: - 在 JSP 页面上,可以使用 Shiro 提供的 JSTL 标签库来简化安全控制,例如 `<shiro:principal>` 显示登录用户信息,`...
// 跳转到指定的登出后页面 issueRedirect(request, response, redirectUrl); // 返回 false 表示不执行后续过滤器,直接跳转到登录页面 return false; } } ``` 在 `preHandle` 方法内,除了调用父类的 `...
Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、会话管理和加密等安全服务。在“shiro登陆身份认证和权限管理 密码加密”这个主题中,我们将深入理解 Shiro 如何处理用户登录、验证用户身份...
在具体实现上,可能涉及到以下步骤: 1. 配置Shiro Realm,处理用户的认证和授权逻辑。 2. 实现SessionDAO,对接Redis集群,进行会话的创建、读取、更新和删除操作。 3. 配置Shiro的SessionManager,指定使用自定义...
开发者可以通过下载 "shiro-demo" 文件,导入到 IDE 中运行,查看其如何处理登录、权限检查等操作。通过阅读代码,可以了解 Shiro 如何与后端控制器、数据库及前端交互,从而在自己的项目中应用类似的安全机制。 ...
- 当用户登录成功后,Shiro会自动加载该用户的权限信息。 - 使用`Subject.hasRole()`或`Subject.isPermitted()`来检查用户是否有特定的角色或权限。 - 对于CRUD操作,我们可以为每个操作分配特定的权限,例如`...
SpringBoot整合Shiro后实现免密登录 1,说明一下步骤,需要在原来基础新增三个文件 2,新增CustomToken,重写UsernamePasswordToken免密登录调用方法和密码登录调用方法都在里面。 3,新增...
使用SpringBoot+SpringJPA+Swagger+Shiro快速搭建前后端分离的权限管理系统源码,方便二次开发,项目经过严格测试,确保可以运行! 快速搭建前后端分离的权限管理系统 提供一套基于SpringBoo+shiro的权限管理思路. ...
采用了Spring+SpringMVC+Mybatis+Shiro+Msql来写了一个登陆验证的实例,具体效果和过程看http://blog.csdn.net/evankaka/article/details/50196003
本项目"springboot+shiro+swagger2前后端分离整合"提供了一个实用的框架组合,旨在帮助开发者快速搭建这样的应用。以下是对这个项目及其组成部分的详细解析: 1. **Spring Boot**: Spring Boot是由Pivotal团队...
Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了认证、授权、加密和会话管理功能,可以非常方便地为你的应用程序提供全面的安全管理服务。在"shiro管理端权限控制"这个主题中,我们将深入探讨 Shiro 如何...
- 登录成功后,Shiro 会根据用户的权限控制是否允许访问特定的资源,确保安全的用户体验。 通过以上步骤,Jeesite 结合 Shiro 实现了登录验证和权限管理,确保了系统的安全性。对于初次接触 Shiro 的开发者,理解...
本课程“Shiro入门到精通”旨在帮助开发者全面理解和掌握Shiro的使用,通过与Spring Security的对比,进一步突出Shiro在实际开发中的优势和适用场景。 首先,我们来探讨Shiro的基础知识。Shiro的核心组件包括...
Shiro本身虽然不直接参与前端的实现,但是通过其后端安全控制,可以为前端提供必要且足够的安全数据和操作逻辑支持。 在实际应用中,Shiro与Vue结合的前后端分离解决方案可以为项目提供一个清晰的安全框架和高效的...
- 后端Shiro进行身份验证,如果成功,生成JWT并返回给前端。 - 前端接收到JWT后,将其存储在本地(如Cookie或LocalStorage)。 - 之后的每次请求,前端都将JWT附在Header中发送到后端。 - 后端收到请求,使用JWT验证...