shiro控制登陆成功后跳回之前的页面

登陆之后跳回之前的页面是在做登陆注册模块时遇到的一个需求,也是很有必要的。若用户直接访问登陆页面,那可以控制它直接到首页,但是要用户没有登陆直接访问自己的购物车等需要经过身份认证的页面,或者因为session超时,用户需要重新登陆,那么这个时候跳回之前的页面就是一件提升用户体验的事情了。实现这一功能,暂时想到两种方法,一是用ajax的方式登陆,这样直接在当前页面弹窗让用户登录既可,二是把用户未登录前的url存在session中,login成功之后先检查session中是否存在这样的一个url。

项目中集成了shiro,里面就有这么个功能,防止WebUtils工具类里面。

废话了这么多,其实网上也有人写过这么一篇关于这个功能实现的的博文,这个大神写的shiro教程也是蛮值得一看的,只不过我在使用

SavedRequest savedRequest = WebUtils.getSavedRequest(request);的时候,savedRequest 对象一直为空,囧了一段时间,后面再群里遇到高人指点,发现是自己的配置文件没写好,即shiroFilter中的filterChainDefinitions,所需要拦截的url没有写完全,像下面这段配置

<!-- Shiro的Web过滤器 -->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager" />
        <property name="loginUrl" value="/cooka-user-web/login" />
        <property name="unauthorizedUrl" value="/unauthorized  " />
        <property name="filters">
            <util:map>
                <entry key="authc">
                    <bean
                        class="org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter" />
                </entry>
            </util:map>
        </property>
        <property name="filterChainDefinitions">
            <value>
                # 无需认证便可以访问的的文件放在前面
                /js/* = anon
                /css/* = anon
                /img/* = anon
                /images/* = anon

                /user-web/login = anon
                /logout = logout

                /user-web/* = authc
                /backend-web/* = authc
            </value>
        </property>
    </bean>

只有/user-web/*  (除去login,这里url的匹配使用短路机制,即最先匹配原则)和/backend-web/ 后面的url,才会被允许存入到session中,这样,当用户没有登陆就去访问包含以上两种链接前缀的时候,登陆成功后就会跳转到之前的界面了。

时间: 2024-12-20 09:33:37

shiro控制登陆成功后跳回之前的页面的相关文章

jfianl 登录状态验证,未登录打开登录页面,登录成功后跳转到请求页面

项目中的一个需求,1.当用户提交预约信息时,如果未登录跳装到用户登录(注册)界面. 2.当登录(注册)成功后,跳转到请求页面 思路:1.增加登录状态验证拦截器,验证登录状态,如果未登录,获取请求路径,并保存在requset中,跳转登录(注册)页面 2.前台form中 增加 hiddent  input  .value为request中的请求路径 3.后台登录controller中验证,如登录(注册)成功则跳转到 请求路径 代码:1. public class LoginInterceptor i

Shiro的FormAuthenticationFilter登陆成功不跳转

http://jinnianshilongnian.iteye.com/blog/2024723 张开涛的这个配置信息有误,导致默认authc登陆成功后无法跳转 FormAuthenticationFilter默认表单登陆拦截器 帮你实现了登陆,你只需处理DEFAULT_ERROR_KEY_ATTRIBUTE_NAME错误信息的显示. 配置信息为 [main] authc.loginUrl=/login [urls] /login=authc 注意: authc.loginUrl=/login

登陆成功后,返回登陆前的网址和删除服务器图片

登陆成功后,返回登陆前的网址 登陆前网站的cs的Page_Load方法中加入: protected void Page_Load(object sender, EventArgs e) { Session.Add("url", Request.Url.ToString()); } 登录网站的cs登录成功后: Response.Redirect(Session["url"].ToString());  删除服务器图片 GridView1绑定数据库删除图片例子: cs文

使用httpClient模拟登陆开心网过程中登陆成功但是跳转不成功

package com.haojiahong.test; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ResponseHandler; import org.apache.http.client.entity.UrlEncodedF

微信分享后跳回项目,为何不执行onResp

我是把分享的代码写在ShareViewController.m中的,不是像DEMO中通过委托让AppDelegate.m中来执行的.现在分享都可以了,也能跳回自己都项目,就是onResp执行不了. 放在AppDelegate里 在 [WXApi handleOpenURL:url delegate:self] 这个self 换成 ShareViewController的实例 - (BOOL)application:(UIApplication *)application handleOpenUR

winform中启动登陆窗体,登陆成功后登陆窗体自动销毁

Login login= new Login();               login.ShowDialog();               if (login.DialogResult == DialogResult.OK)               {                   Application.Run(new mian());                   login.Dispose();               }               else

listview点击item后跳转到详细页面后返回listview数据不显示问题

原因: 触发返回按钮后跳转到listview主界面,数据要重新加载,这时要想加载数据,就要在启动Activity的时候程序自动加载,而handler里面写的是主线程,一定会执行,所以在后面添加 /**   * 处理消息(主线程),更新适配器,如果在Thread里处理可能会出错   * */   handler = new Handler() { @Override    public void handleMessage(Message msg) {     switch (msg.what)

web.config中配置页面出错后跳转指定错误页面

每当用户访问错误页面时,会出现不友好的404错误,所以为了防止这种不友好,我们在web.config中的<system.web>节点下配置 <customErrors>,在出现比如403 404这样的错误时,跳转到我们自定义的页面 <customErrors>:用户错误配置节 该配置节能够指定当出现错误时,系统自动跳转到一个错误发生的页面,同时也能够为应用程序配置是否支持自定义错误.“<customErrors>”配置节包括两种属性,这两种属性分别为mode

登录成功后跳转回登录前的页面,实现思路

首先,我的网站都是动态跳转的. 整体思路: 1.拦截:在拦截到用于session过期,或用户未登录的情况下,将登录前requestUrl,post请求的参数组成paramMap存放到session中 String requestURL = request.getRequestURL().toString(); Map<Integer, String> paramMap = new HashMap<Integer, String>(); Enumeration e = req.get