Shiro登录成功之后跳到指定URL

通常我们使用shiro,登录之后就会跳到我们上一次访问的URL,如果我们是直接访问登录页面的话,shiro就会根据我们配置的successUrl去重定向,如果我们没有配置successUrl的话,那么shiro重定向默认的/,这个逻辑看shiro的源码就可以知道:

1.shiro会把请求信息保存到session中:

2.然后判断是否已经登录,如果没有登录,就会跳到登录页面,用户输入凭证之后就会交给FormAuthenticationFilter这个类来处理;

3.如果登录成功之后就会调用一下方法重定向:

其中的issueSuccessRedirect方法如下:

FormAuthenticationFilter出来之后就会交给这个方法处理重定向:

从上面就可以看出,shiro去session中找出之前的保存的请求,如果没有的话就会跳转到我们配置的successUrl!

 但是现实中往往有很多需求就是,要求我们登录成功之后要跳到一个固定的页面,通常是跳到首页,那这时候我们应该怎么做呢?

通过查看源码,我发现在shiro的webUtils工具类中有这样一个方法:

意思是,获取session中的请求信息,并且清理他;

有了这个方法之后就好办了!

我们可以重写FormAuthenticationFilter的onLoginSuccess方法,具体如下:

这样,就实现了在交给shiro处理重定向的时候清理了session中保存的请求信息,这样的话,就可以我们指定的url传递进去,这样就实现了跳转到我们指定的页面;

其次,要把我们定义的过滤器配置一下:

注入:

加到shiro过滤器链中:

这样使用authc的时候就是我们自定一个过滤器了,如果觉得用同个名字不好也可以自己定义名字!

时间: 2024-10-01 19:53:13

Shiro登录成功之后跳到指定URL的相关文章

使用Shiro实现登录成功后跳转到之前的页面_java

这个问题是之前在做登录注册模块时遇到的需求,如何用户直接访问登录页面,可以控制直接跳到首页,但是如果是用户没有登录直接访问了购物车等需要经过身份认证的页面,或者是因为session超时,用户需要重新登录,那么这时跳回之前的页面就是提升用户体验的事情.实现此功能比较好的方法是用ajax的方式登陆,这样直接在当前页面弹窗让用户登录既可,二是把用户未登录前的url存在session中,login成功之后先检查session中是否存在这样的一个url.下面通过一段代码给大家分享下: 项目中集成了shir

CAS单点登录,客户端为weblogic,登录成功后跳转到客户端应用系统时报错

问题描述 CAS单点登录,客户端为weblogic,登录成功后跳转到客户端应用系统时报错 CAS单点登录部署在tomcat中,客户端应用中间件为weblogic.能成功进入单点登录首页并能成功登录,但是跳转到客户端应用系统(weblogic)时报下文中的错误.但是客户端应用系统中间件替换成tomcat却没有问题,能够成功跳转到系统.求高手帮忙! Error 500--Internal Server Error javax.net.ssl.SSLKeyException: FATAL Alert:

wordpress后台无法登陆 登录成功自动跳转登录页面

在wp-includes文件夹中找到pluggable.php文件,用网页编辑软件打开,找到下面这段代码:  代码如下 复制代码 setcookie($auth_cookie_name, $auth_cookie, $expire, ADMIN_COOKIE_PATH, COOKIE_DOMAIN, $secure, true); 大约是在680行左右,然后在这段代码下加上下面这短代码:  代码如下 复制代码 setcookie($auth_cookie_name, $auth_cookie,

android-新手求解,在登录页面判断登录成功后怎么在弹出框的“确定”实现跳转

问题描述 新手求解,在登录页面判断登录成功后怎么在弹出框的"确定"实现跳转 如图所示,不知道这个在哪里设置监听器,因为在 "判断输入的用户是否正确 "那边弹出框设置的,.setMessage("成功登录").setPositiveButton("确定",null).show();......之前class里边设置过监听器如ss,然后null就填ss,但好像不行,发现是两边没在一起.一个在class,一个在public Bool

Struts2登录成功返回一个jsp页面,失败返回一个json字符串遇到的问题

问题描述 ]在做一个登录模块action代码publicStringlogin(){Useruser=this.loginService.getUserByUsernameAndPassword(this.getModel().getUsername(),this.getModel().getPassword());if(user!=null){OAUtils.FromSession("user",user);return"SUCCESS";}else{this.m

https-登录页面使用HTTPS协议,登录成功跳转到个人中心使用HTTP协议,怎么实现啊?

问题描述 登录页面使用HTTPS协议,登录成功跳转到个人中心使用HTTP协议,怎么实现啊? 登录页面使用HTTPS协议,登录成功跳转到个人中心使用HTTP协议,用的是Tomcat7.0, 我指定登录页面必须是使用HTTPS协议,用了Shiro框架,重定向方法是这样的:@Override protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception { HttpSe

java-登录前和登录成功的页面Url一样 怎么回事,求大神

问题描述 登录前和登录成功的页面Url一样 怎么回事,求大神 5C 为什么登录界面的Url是****/loginaction.action,登录成功后的页面也是****/loginaction.action?前后url一样,这样我模拟登陆怎么判断是否登录成功了呢 求详解 解决方案 那就是你的代码并没有跳转呀...要是登陆成功肯定要有跳转代码的呀 解决方案二: 看你跳转代码,当你点击登录按钮 跳转的是什么页面. 你可以传一个参数过去.当登录成功,把传的参数在成功页面显示 解决方案三: 判断登陆成功

iis7-iis发布网站,登录成功后不跳转

问题描述 iis发布网站,登录成功后不跳转 在iis发布网站后,,网站使用表单身份验证,网站登录后闪了一下不跳转到指定页面. 解决方案 是不是权限没有设置???

webBrowser 怎么获取登录后跳转的URL 源代码

问题描述 问题描述:利用webbrowser自动填写并提交表单,提交成功以后跳转到新的页面(提示登录成功或者登录失败)webBrowser1_DocumentCompleted是在找个事件中提交登录,请问怎么获取新的页面的源代码?我在登录之后等待1分钟,然后弹出源代码还是登录页面的,MessageBox.Show(webBrowser1.Document.Body.OuterHtml);webBrowser1.Url.LocalPath;还是登录页面的地址请问怎样才可以获取新页面的HTML还判断