`
Ydoing
  • 浏览: 100571 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

shiro用authc配置后登录成功后不能跳转到index页面

阅读更多

这两天发现一个问题,如题,尝试了很多方法,都没法解决,真是很郁闷。最后看源码才知道,我的配置如下。原意是从/api/user/login登录成功后,跳转到/index,但是怎么都不能跳转到/index。原来authc拦截器(即FormAuthenticationFilter),验证成功后只会跳转到最开始你进入的页面,因为我是从/api/user/login页面进入登录,所以只会跳转到/api/user/login。要想跳转到/index页面,只有最开始从/index页面进入,后台会重定向到/api/user/login页面,验证成功后,才返回/index页面。


配置如下:

    <!-- Shiro的Web过滤器 ,id要与web.xml一致 -->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager" />
        <property name="loginUrl" value="/api/user/login" />
        <property name="successUrl" value="/index" />
        <property name="unauthorizedUrl" value="/unauthorized" />
        <property name="filters">
            <map>
                <entry key="authc" value-ref="formAuthenticationFilter" />
            </map>
        </property>
        <property name="filterChainDefinitions">
            <value>
                /static/** = anon
                /api/user/login = authc
                /api/user/logout = logout
                /api/user/register* = anon
                /unauthorized = anon
                /** = user
            </value>
        </property>
    </bean>

FormAuthenticationFilter部分源码:

    protected boolean onLoginSuccess(AuthenticationToken token, Subject subject,
                                     ServletRequest request, ServletResponse response) throws Exception {
        issueSuccessRedirect(request, response);
        //we handled the success redirect directly, prevent the chain from continuing:
        return false;
    }

从源码我们可以看出,登录成功后,会执行

     protected void issueSuccessRedirect(ServletRequest request, ServletResponse response) throws Exception {
        WebUtils.redirectToSavedRequest(request, response, getSuccessUrl());
    }

这个方法就是

   public static void redirectToSavedRequest(ServletRequest request, ServletResponse response, String fallbackUrl)
            throws IOException {
        String successUrl = null;
        boolean contextRelative = true;
        SavedRequest savedRequest = WebUtils.getAndClearSavedRequest(request);
        if (savedRequest != null && savedRequest.getMethod().equalsIgnoreCase(AccessControlFilter.GET_METHOD)) {
            successUrl = savedRequest.getRequestUrl();
            contextRelative = false;
        }

        if (successUrl == null) {
            successUrl = fallbackUrl;
        }

        if (successUrl == null) {
            throw new IllegalStateException("Success URL not available via saved request or via the " +
                    "successUrlFallback method parameter. One of these must be non-null for " +
                    "issueSuccessRedirect() to work.");
        }

        WebUtils.issueRedirect(request, response, successUrl, null, contextRelative);
    }

关键在于successUrl = savedRequest.getRequestUrl(),会把successUrl重新赋值,配置的/index失效。

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    shiro管理多登录入口配置,手机端登录与网页端登录

    shiro管理多登录入口配置,手机端登录与网页端登录两个的shiro配置,两个Realm,两个表单过滤,验证码生成,登录类型判断,xml详细配置

    SpringBoot整合Shiro后实现免密登录

    SpringBoot整合Shiro后实现免密登录 1,说明一下步骤,需要在原来基础新增三个文件 2,新增CustomToken,重写UsernamePasswordToken免密登录调用方法和密码登录调用方法都在里面。 3,新增...

    shiro 教程

    第三章:Shiro的配置 包括:程序配置、ini配置的方式(包括各个部分的配置)、权限字符串方式等 第四章:Shiro的身份认证 包括:认证示例、理解Remembered和Authenticated、理解认证的流程、多个Realm等 第五章:...

    单点登录sso-shiro-cas-maven

    spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库生成语句,采用的...

    Shiro原理+配置

    三个核心组件:Subject, SecurityManager 和 Realms. Subject:即"当前操作用户"。...也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。

    shiroFilter权限验证

    -- 登录成功后要跳转的连接 --&gt; &lt;property name="successUrl" value="/index.html"/&gt; &lt;!-- 用户访问未对其授权的资源时,所显示的连接 --&gt; &lt;!-- 若想更明显的测试此属性可以修改它的值,如unauthor....

    简单配置 shiro + spring +springMVC+hibernate简单框架

    2.Shiro Filter 设置拦截的内容和登录页面和成功、失败页面 3.配置securityManager &lt;bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"&gt; &lt;!-- 单realm应用。如果有多个...

    springmvc+spring+shiro+cas单点登录实例

    然后clean install tomcat7:run 就能跑起来,注意要修改node1和node2里的shiro.properties配置文件,要配置登录成功成功返回的路径 我的访问的分别是: 服务端: http://localhost:8050/cas-server 客户端:...

    ssm+shiro+redis 登录控制及重试次数超过5次账号锁定一分钟

    shiro+redis 实现登录控制及密码重试次数超过5次后账号锁定一分钟不能登录

    shiro实现单点登录

    spring整合shirospring-data-redis和spring-session-data-redis通过shiro实现单点登录

    shiro获取登录状态和用户信息

    shiro根据session获取登录状态和用户信息

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

    主要介绍了如何使用Shiro实现不同用户登录成功后跳转到不同主页,实现此功能目前比较好的方法是用ajax的方法登录,第二种方法是把用户未登录前的url存在session中,需要的朋友可以参考下

    SpringBoot 集成 Shiro 实现动态uri权限

    本文小编将基于 SpringBoot 集成 Shiro 实现动态uri权限,由前端vue在页面配置uri,Java后端动态刷新权

    Shiro入门框架

    这是一个shiro的入门Demo.. 使用了Spring MVC,mybaits等技术.. 数据库设计 : User : name--password Role : id--userid--roleName Function : id--userid--url tinys普通用户只能访问index.jsp admin用户通过添加...

    shiro 配置文件

    从web.xml到spring 配置shiro的使用

    shiro登录验证实例

    shiro登录验证实例,下载包虽然是web_exception_project.zip,但是确实是shiro登录验证实例,请放心下载,另外,实例详情请访问博主博客:http://blog.csdn.net/u013142781

    一个简单的springboot整合shiro demo,实现了登录页面拦截,账户密码提交正确放行

    一个简单的springboot整合shiro demo,实现了登录页面拦截,账户密码提交正确放行

    shiro注解版

    这是一个shiro的入门Demo.. 使用了Spring MVC,mybaits等技术.. 数据库设计 : User : name--password Role : id--userid--roleName Function : id--userid--url tinys普通用户只能访问index.jsp admin用户通过添加...

    shiro-spring-boot-starter:该项目主要利用Spring Boot的自动化配置特性来实现快速的将Shiro集成到SpringBoot应用中

    简介该项目主要利用Spring Boot的自动化配置特性来实现快速的将Shiro集成到SpringBoot应用中源码地址Github:码云:我的博客:自制的小工具,欢迎使用和Star,如果使用过程中遇到问题,可以提出Issue,我会尽力完善...

Global site tag (gtag.js) - Google Analytics