shiro登录控制successUrl的问题

问题描述

当前使用struts2+shiro+spring进行开发,shiro控制认证和权限。在applicationContext-shiro内设置了successUrl,但是实际业务需求是根据不同的登录人,跳转至不同的页面。系统内有一个LoginAction方法Subject subject = SecurityUtils.getSubject();UsernamePasswordToken loginToken = new UsernamePasswordToken(getUserName(), getPassword());try{subject.login(loginToken);}catch (IncorrectCredentialsException e) {LOG.warn("the username isn't exist.{}",getUserName());return ERROR;}catch(UnknownAccountException e){LOG.warn("the username:{} and password:{} isn't correct.",new Object[]{getUserName(),getPassword()});return ERROR;}struts2内配置了相应的result<action name="login" class="login"><result>/pages/web/recommendation.jsp</result></action>现实情况是登录成功后并不受shiro控制,是根据struts2的result进行跳转的。在网上也查过通过FormAuthenticationFilter的方式控制successUrl,但是对LoginAction并不起作用,执行LoginAction登录方法时,并不能调用onLoginSuccess方法。查看shiro的filter机制,感觉它都是前置过滤。但是这种登录应该是判断loginUrl和配置的是否一样,然后在判断subject的authented状态的后置过滤性啊。(这是我的思路)应该有人处理过类似的需求,还请帮忙说下这类需求的login逻辑要怎么写,shiro针对login的url和自定义filter要怎么配。谢谢。

解决方案

我记得shiro是监听loginUrl的请求,它会看你loginUrl页面上的form中的username,password,rememberMe的值然后登陆,而这个form是不用指定登陆的action的。所以struts2的loginAction实际上是跟shiro无关的,你重写FormAuthenticationFilter的onLoginSuccess方法即可。
解决方案二:
被这个问题弄了两天,郁闷死了,我遇到的场景是,访问项目名,类似http://localhost:8080/dc/,shiro会通过过滤器,进入你配置的loginUrl,然后登录成功后,它会记住你之前访问的链接,那么就自然进入了http://localhost:8080/dc/,这个时候如果你的拦截器配置(filterChainDefinitions)没有配置好/的访问权限的话,就导致页面加载不到rc.contextPath,自己配置的successUrl都没有用,除非重写formAuthenticationFilter,真够狗血的。
解决方案三:
没有单独使用shiro ,我是shiro 结合 cas 进行登录和权限控制的。
解决方案四:
建议看看http://jinnianshilongnian.iteye.com/blog/2018398

时间: 2024-10-21 08:54:38

shiro登录控制successUrl的问题的相关文章

shiro 登录 问题?第一次点击登录按钮先进入自定义的userRealm

问题描述 shiro 登录 问题?第一次点击登录按钮先进入自定义的userRealm 第一次点击登录按钮先进入自定义的userRealm,不进controller,无法跳转:第二次点击登录按钮才能进入controller,再进入userRealm,然后正常跳转,就是说需要点击两次登录按钮才能登录成功,第一次点击登录按钮也获取到username和password.采用ajax,post提交. 哪位朋友也遇到过类似的问题,请指导!

远程控制-实现电脑的远程登录控制

问题描述 实现电脑的远程登录控制 wi7系统,对方想通过远程控制我的电脑(不使用其他软件),怎样设置我的电脑设置,附图! 谢谢,急需! 解决方案 计算机->属性-<高级系统设置->远程->允许远程协助连接这台计算机 当然你设置了这些也不一定能连接,还要看你的网络环境

asp net 发布域控制-asp.net iis发布域登录控制

问题描述 asp.net iis发布域登录控制 企业内部使用了域管理,客户要求主页不需要域登录也能看到,但是除了主页之外的页面就需要 域登录成功才能看见. 现在我知道怎样实现域登录并获取登录用户域里面的信息,就是不知道怎样把主页剔除开来不需要域登录就能看见. 请各位不吝赐教!!

shiro登录时jsp页面的样式显示不出来

问题描述 shiro登录时jsp页面的样式显示不出来 shiro配置里关于样式权限配置: <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager"/> <property name=

通过监听设置实现登录控制

通过监听设置实现登录控制 作者:PrudentWoo  QQ:286507175 happy-wuweilong@hotmail.com WebTitle: http://www.prudentwoo.com    我们大家都知道一个问题,通常情况下,Oracle客户端只要获取了服务器端的监听信息就可以无止境的访问数据库了,尤其是很多DBA和系统管理员都喜欢将Oralce的sys和system等具有最高权限的用户的密码设置为非常简单,有的甚至就直接设置成'oracle','orcl','1234

shiro登录流程

ShiroFilter Shiro提供了与Web集成的支持,其通过一个ShiroFilter入口来拦截需要安全控制的URL,然后进行相应的控制,ShiroFilter类似于如Strut2/SpringMVC这种web框架的前端 其是安全控制的入口点,其负责读取配置(如ini配置文件),然后判断URL是否需要登录/权限等工作. web.xml配置名字为shiroFilter的过滤器,这个bean去 shiro.in 或者shiro.xml配置文件中找 首先是在web.xml中配置Delegatin

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

通常我们使用shiro,登录之后就会跳到我们上一次访问的URL,如果我们是直接访问登录页面的话,shiro就会根据我们配置的successUrl去重定向,如果我们没有配置successUrl的话,那么shiro重定向默认的/,这个逻辑看shiro的源码就可以知道: 1.shiro会把请求信息保存到session中: 2.然后判断是否已经登录,如果没有登录,就会跳到登录页面,用户输入凭证之后就会交给FormAuthenticationFilter这个类来处理: 3.如果登录成功之后就会调用一下方法

如何远程登录控制管理云服务器

  云服务器远程管理功能分为: 1. windows系统的远程管理 2. linux系统的远程管理 * 该功能旨在解决用户远程登录云服务器,进行管理工作的问题. 登录服务器时 linux操作系统的用户名为root windows操作系统的用户名为administrator 密码将通过短信发送至您云帐号绑定的手机上,同时还会通过邮件发送至您注册时的邮箱里.(mail.aliyun.com或者您自己绑定的邮箱)

ELK菜鸟手记 (三) - X-Pack权限控制之给Kibana加上登录控制以及index_not_found_exception问题解决

  0. 背景 我们在使用ELK进行日志记录的时候,通过网址在Kibana中查看我们的应用程序(eg: Java Web)记录的日志, 但是默认是任何客户端都可以访问Kibana的, 这样就会造成很不安全,我们应该设置相应的用户名和密码, 只有通过登录用户名和密码才能通过Kibana查看我们的日志.   1. 在elasticsearch 2.x的版本是怎么做的 笔者网上查了一些博文,大部分推荐的是通过给elasticsearch安装Shield插件,参考链接如下: http://blog.cs