针对shiro框架authc拦截器认证成功后跳转到根目录,而非指定路径问题
一、针对shiro框架authc拦截器认证成功后跳转到根目录,而非指定路径问题

- 第一种情况,用户在没登录的情况下,直接访问网站的内部路径,比如http://localhost:8080/ list.jsp,这时登录拦截器进行拦截该请求,发现用户没有登录,直接跳转到authc.loginUrl里设置的路径(如login.jsp),并且把这次请求的地址http://localhost:8080/ list.jsp也进行了保存,当系统跳转到login.jsp,用户成功登录后,会直接返回上次访问的list.jsp页面。
- 第二种情况,当用户直接请求登录,而不存在上次访问请求url时,用户登录成功后就会跳转到 / 根目录
|
import org.apache.log4j.Logger;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
import org.apache.shiro.web.util.WebUtils;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class LoginFormAuthenticationFilter extends FormAuthenticationFilter {
protected final Logger logger = Logger.getLogger(LoginFormAuthenticationFilter.class);
@Override
protected boolean onLoginSuccess(AuthenticationToken token,
Subject subject, ServletRequest request, ServletResponse response)
throws Exception {
boolean contextRelative = true;
String successUrl = this.getSuccessUrl();
if ("".equals(successUrl)) {
successUrl = DEFAULT_SUCCESS_URL;
}
WebUtils.issueRedirect(request, response, successUrl, null, contextRelative);
return false;
}
}
|
|
<bean id="loginFormAuthenticationFilter" class="xxx.xxxx.xxxx.LoginFormAuthenticationFilter" />(根据自己的路径来)
|
|
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="filters">
<map>
<entry key="authc" value-ref="loginFormAuthenticationFilter"/>
</map>
</property>
|
二、针对shiro框架logout注销成功后跳转到根目录,而非指定页面问题
|
@RequestMapping("/logout")
public String logout(HttpServletRequest request) {
SecurityUtils.getSubject().logout(); // session删除、RememberMe cookie
// 也将被删除
return InternalResourceViewResolver.REDIRECT_URL_PREFIX + "/login.jsp";
}
|
|
public class SystemLogoutFilter extends LogoutFilter {
@Override
protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
//在这里执行退出系统前需要清空的数据
Subject subject=getSubject(request,response);
String redirectUrl=getRedirectUrl(request,response,subject);
ServletContext context= request.getServletContext();
try {
subject.logout();
context.removeAttribute("error");
}catch (SessionException e){
e.printStackTrace();
}
issueRedirect(request,response,redirectUrl);
return false;
}
}
|
|
<bean id="systemLogoutFilter" class="xxxx.xxx.xxxx.SystemLogoutFilter">(自己的包路径)
<property name="redirectUrl" (固定的属性名)value="/login.do"></property> (自定义路径)
</bean>
|
|
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="filters">
<map>
<entry key="logout" value-ref="systemLogoutFilter"></entry>
</map>
</property>
|
针对shiro框架authc拦截器认证成功后跳转到根目录,而非指定路径问题的更多相关文章
- struts2框架之拦截器(参考第二天学习笔记)
拦截器 1. 什么是拦截器 1). 与JavaWeb中的Filter比较相似. 2). 拦截器只能拦截Action!!! 2. Struts中定义了很多拦截器,其中defaultStack中的拦截器会 ...
- Struts2透过自定义拦截器实现登录之后跳转到原页面
Struts2通过自定义拦截器实现登录之后跳转到原页面 这个功能对用户体验来说是非常重要的.实现起来其实很简单. 拦截器的代码如下: package go.derek.advice; import g ...
- python作业设计:输入用户名密码,认证成功后显示欢迎信息,输错三次后锁定
作业需求: 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定实现思路: 1.判断用户是否在黑名单,如果在黑名单提示账号锁定. 2.判断用户是否存在,如果不存在提示账号不存在. 3.判 ...
- 【Shiro】调用doGetAuthenticationInfo进行认证成功之后,isAuthenticated是false的问题。
使用@Configuration配置shiro无状态登录时出现的问题,在subject.login之后当前线程重新绑定了一个假定subject,isAuthenticated. 这里自定义的访问拦截器 ...
- 基于SSH2框架Struts2拦截器的登录验证实现(转)
大象在这里假设你已经弄清楚了Struts2拦截器的基本概念,可以进入实际运用了.那么我们在之前的基础上只需要做下小小的改变,就可以使用Struts2的拦截器机制实现登录的验证. 修改数 ...
- 微信小程序 wepy框架 之拦截器intercepter使用
1,在使用wepy框架创建的项目下 找到src/app.wpy 2,在app.wpy constructor方法中添加 super(); this.use('promisify');//启用ES6 p ...
- SSM整合AOP,日志框架和拦截器
前言 日志是所有系统必不可少的部分,而AOP在MVC通常用于监控方法调用,可以生成一个traceid,记录从用户调用到底层数据库的数据链路,帮助监控和排查问题. AOP 现在做一个简单的前置切面,用来 ...
- SpringMVC框架05——拦截器
1.拦截器概述 Spring MVC的拦截器(Interceptor)与Java Servlet的过滤器(Filter)类似,它主要用于拦截用户的请求并做相应的处理,通常应用在权限验证.记录请求信息的 ...
- springmvc框架使用拦截器实现301永久重定向,其实用过滤器应该是更好
做seo的朋友提出要求 所有不带www.的访问需要301到带www的域名,以集中权重 可以使用过滤器检查servername带不带www,也可以使用拦截器 不会配置过滤器,所以先用拦截器实现吧,不过我 ...
随机推荐
- CentOS7 安装 JIRA 7.2.x 教程:下载、安装、汉化、破解
1.先看视频,参考着能装出个试用版来,不同的地方后面再做说明.JIRA 安装视频(Linux) http://www.confluence.cn/pages/viewpage.action?pageI ...
- 同时对view延时执行两个动画时候的现象
同时对view延时执行两个动画时候的现象 对于view延时执行了两个动画后,会将第一个动画效果终止了,直接在第一个动画的view的最后的状态上接执行后续的动画效果,也就是说,我们可以利用这个特性来写分 ...
- [翻译] ZFTokenField
ZFTokenField 本人视频教程系类 iOS中CALayer的使用 效果图: iOS custom view that let you add token view inside like ...
- MSDN版、OEM版、RTM版、VOL版等的区别
我们常常听说操作系统的MSDN版.OEM版.RTM版.VOL版等等,它们到底是什么意思,有什么不同呢? (一)MSDN (Microsoft Developer Network)版MSDN软件是微软公 ...
- switch结构可以更好的解决等值判断问题
switch 选择结构的语法:switch (表达式){case 常量 1://代码块1:break;case 常量 2://代码块2:break;......default://代码块n:break ...
- ESS控制台发布新功能:创建多实例规格的伸缩配置
背景 原弹性伸缩ESS服务限定,生效的伸缩配置中只能对应一种实例规格,这样就会存在如果生效的配置中的实例规格的库存不足(高配实例规格通常更容易出现库存不足的情况)时, 用户配置好的伸缩规则以及伸缩组对 ...
- December 20th 2016 Week 52nd Tuesday
With the wonder of your love, the sun above always shines. 拥有你美丽的爱情,太阳就永远明媚. To accept the love from ...
- Shortest Paths
最短路径 APIs 带权有向图中的最短路径,这节讨论从源点(s)到图中其它点的最短路径(single source). Weighted Directed Edge API 需要新的数据类型来表示带权 ...
- [零基础学JAVA]Java SE面向对象部分.面向对象基础(03)
1.静态变量的使用 2.单例模式的使用. 3.构造方法的私有化. 4.string的使用,两种构造的不同. 小的记忆错误: · 数组的长度:数组名称.length 这个没()哈~~ · 字符 ...
- Xposed模块开发基本方法记录
由于某些课程实验的要求,需要通过xposed框架对某应用进行hook操作,笔者选用了开源且免费的xposed框架进行实现.虽然网上存在一些利用xposed实现特定功能的文章资源,但大多均将xposed ...