`
Ydoing
  • 浏览: 105930 次
  • 性别: 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 的过滤器链定义,确保只有需要认证的URL会被保存,这样才能在用户登录后跳转到他们最初尝试访问的页面。在实际应用中,根据项目的具体需求,可以结合这两种方法,以提供更优质的用户体验。

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

    在"shiro管理多登录入口配置,手机端登录与网页端登录"这个场景下,我们需要考虑如何为不同的登录入口(手机端和网页端)设置独立的验证流程。 首先,Shiro 的核心组件 Realm 负责与应用数据源交互,验证用户身份。...

    若依 修改默认跳转页面 demo

    理解Shiro的基本概念如Subject、Realms、Session管理等,以及如何通过Shiro配置实现用户登录、授权等功能,对于修改默认跳转页面至关重要。 3. **Spring Boot**:作为若依的底层基础,Spring Boot简化了Spring应用...

    SpringBoot整合Shiro后实现免密登录

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

    springmvc+shiro配置教程

    --登录成功后指定页面 --&gt; &lt;property name="loginUrl" value="/login.jsp" /&gt; &lt;!--登录页面 --&gt; &lt;property name="unauthorizedUrl" value="/index.html" /&gt; &lt;!--访问一个没有权限的链接是跳转至此页面 --&gt; &lt;!-- ...

    shiro 教程

    Shiro提供了灵活的配置方式,可以通过程序代码配置或者使用ini配置文件。通过ini文件可以配置Shiro的各个组件,包括安全数据源、过滤器链、会话管理等。权限字符串方式用于定义和表示权限信息,支持通配符以及逻辑...

    shiro实现单点登录

    通过以上步骤,我们便能成功地利用Spring、Shiro、Spring Data Redis和Spring Session Data Redis实现单点登录功能。这个解决方案不仅提供了便捷的用户体验,还降低了系统复杂性,提高了安全性。在实际开发中,可以...

    shiro+SSM实现安全登录的项目

    配置如'authc'(认证过滤器)和'perms'(权限过滤器)来保护需要登录或特定权限才能访问的资源。 4. **Session管理**:Shiro可以接管Web应用的Session管理,提供基于内存、Cookie或者JVM级别的分布式Session管理。 5...

    SSM+shiro登录控制

    在"shiro控制使用跳转链接前必须登录"的场景下,Shiro通常会在用户尝试访问受保护资源时进行拦截。如果用户未登录,Shiro会将请求重定向到登录页面。实现这一功能的关键在于配置Shiro的Web过滤器。在`web.xml`中,...

    Jeesite 登录login涉及到shiro验证和授权的流程分析

    - 如果用户未登录,Shiro 将自动重定向到配置的 `loginUrl`,在 Jeesite 中,这通常是登录界面。 3. **创建 Token**: - `FormAuthenticationFilter` 会捕获前端提交的 `username` 和 `password`,并使用 `...

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

    本项目"shirodemo"就是一个很好的示例,展示了如何在SpringBoot环境中配置和使用Shiro来实现基本的登录验证和权限拦截。 首先,SpringBoot提供了便捷的起步依赖(starters)来简化项目的初始化工作。在Shiro的整合...

    shiroFilter权限验证

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

    shiro-单用户登录.zip

    - 登录成功后,Shiro会自动处理Session和Cookie,设置Remember Me功能可选。 5. **会话管理** - Shiro提供会话管理功能,可以监听会话创建、修改、销毁等事件,方便实现会话超时、跨域会话共享等功能。 - 使用...

    shiro简单登录+logback日志记录

    《Shiro简单登录+Logback日志记录》 在现代Web开发中,权限管理和日志记录是两个不可或缺的环节。Apache Shiro是一个强大且易用的Java安全框架,提供了认证、授权、会话管理和加密等功能,而Logback作为Log4j的替代...

    SSM整合Shiro-登录案例.zip

    同时,配置过滤器链,将Shiro的过滤器绑定到URL路径上,比如`authc`过滤器用于处理未登录的请求。 4. **编写登录控制器**:创建一个登录控制器,处理用户的登录请求。当用户提交登录信息时,控制器调用Shiro的API...

    基于Shiro 拦截URL,实现权限控制

    1. **配置Shiro**:在Spring或者其他的配置文件中,你需要声明并配置Shiro的相关过滤器,如`authc`(用于身份验证)、`perms`(基于权限的拦截)和`roles`(基于角色的拦截)。 2. **定义角色和权限**:在提供的`...

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

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

    shiro 配置文件

    总的来说,Shiro 与 Spring 的整合涉及到多个配置文件,包括 `web.xml`、`springmvc.xml`、`spring-shiro-web.xml` 和 `applicationContext.xml`。通过这些配置,我们可以定制化 Shiro 的认证、授权规则,并利用 ...

    freemarker的shiro标签

    3. **匿名访问与登录需求**:Shiro标签还提供了检查用户是否已登录的功能,例如`&lt;@shiro.anonymous&gt;`表示匿名用户可以访问,而`&lt;@shiro.authc&gt;`则表示只有登录用户才能访问。这些标签可以帮助你轻松地创建公共和私有...

Global site tag (gtag.js) - Google Analytics