文档章节

shiro不明白

momo1987
 momo1987
发布于 2017/09/08 18:34
字数 597
阅读 16
收藏 2
点赞 0
评论 0

默认拦截器FormAuthenticationFilter 只拦截post请求。

不需要配置authc = org.apache.shiro.web.filter.authc.FormAuthenticationFilter,因为默认的就是FormAuthenticationFilter

我们在登录的时候,如果用户名为username,密码为password,那么我们可以不用自己写登录的代码,FormAuthenticationFilter这个过滤器会自动帮我们进行登陆验证。在测试shiro框架的时候,也都没问题。

但是后来在实际项目开发中,突然发现FormAuthenticationFilter不起作用了,后来才发现原因:在测试的时候,filterChainDefinitions中配置了/** = authc ,表示所有访问地址都有经过FormAuthenticationFilter过滤,但是在实际项目的时候,并没有这么配置,因此失效了。

解决方案:filterChainDefinitions下配置加上/login = authc,此处的/login就是你登录的时候表单提交的路径。

提示:authc表示使用FormAuthenticationFilter来过滤

1. 判断当前URL是否为登录地址:

shiroFilter的loginUrl值。

boolean org.apache.shiro.web.filter.AccessControlFilter.isLoginRequest(ServletRequest request, ServletResponse response);

 

2. 如果当前请求URL为登录地址时,判断是否为form提交。

boolean org.apache.shiro.web.filter.authc.FormAuthenticationFilter.isLoginSubmission(ServletRequestrequest, ServletResponse response);

在此两点可以总结出登录表单及登录界面URL的规则,即:

get loginUrl:进入登录界面

post loginUrl:提交登录表单

username:表单用户名

password:表单密码

 

当登陆报错了才会进来login方法中来。若身份验证成功的话,会直接跳转到之前的访问地址或是successfulUrl去。因为在FormAuthenticationFilter内部都已经做完认证了。我们只需要在login方法中写上(判断异常类型)验证失败的逻辑就好,

@RequestMapping(value = "login",method = RequestMethod.POST)
public string loginSubmit(Param param) {
    String errorClassName = (String) ServletHelper.getRequestAttribute(FormAuthenticationFilter.DEFAULT_ERROR_KEY_ATTRIBUTE_NAME);
    if(UnknownAccountException.class.getName().equals(errorClassName)) {
        ServletHelper.setRequestAttribute("error", "用户名/密码错误");
    } else if(IncorrectCredentialsException.class.getName().equals(errorClassName)) {
        ServletHelper.setRequestAttribute("error", "用户名/密码错误");
    } else if(errorClassName != null) {
        ServletHelper.setRequestAttribute("error", "未知错误:" + errorClassName);
    }
    // 登录失败后,跳回到login画面,让用户再次登录
    return "admin/login";
}

//DisabledAccountException (禁用的帐号)
//LockedAccountException (锁定的帐号)
//UnknownAccountException(错误的帐号)
//ExcessiveAttemptsException(登录失败次数过多)
//IncorrectCredentialsException (错误的凭证)
//ExpiredCredentialsException (过期的凭证)
……

 

shiroFilter的successUrl值

<!--successUrl配置只是做为一种附加配置,只有session中没有用户请求地址时才会使用successUrl。-->
<!--系统默认的是认证成功后跳转到上一次请求的路径,如果是首次请求,-->
<!--那shiro就会跳转到默认虚拟路径“/”,也就是跳转到index.jsp。-->

© 著作权归作者所有

共有 人打赏支持
momo1987
粉丝 1
博文 52
码字总数 12122
作品 0
深圳
shiro报错 There is no session with id [xxx]

shiro报错There is no session with id [xxx] 七月 06, 2015 3:06:03 下午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet [spring_mvc] in con......

Misia寒寒
2015/07/06
16.2K
7
jfinal集成shiro的问题

有过jfinal集成shiro的大神们,求指教下jfinal集成shiro,网上看了那些shiro.ini,但不怎么明白这配置文件是怎么去配置的,求大神们指教下,谢谢

Po-Chan
2015/05/27
139
0
web项目中使用shiro权限管理,session过期

Java web项目中权限控制使用的是shiro,不明白一点,当shiro配置的session过期时候,页面中的ajax请求要怎么处理,现在的是session过期后,ajax返回的数据是login页面,所以出现undefined,这...

嘣猪嗤痴
2016/05/23
6.9K
13
jfinal shiro 问题

@玛雅牛 你好,想跟你请教个问题: 我看到你jfinalshiro2.0 plug ,尝试着做例子现在遇到了一些不太明白地方向您请教。ShiroKit中设置了loginUrl等属性,这些属性如何传递给shiro的auth认证对...

丢不丢你
2015/08/11
227
3
shiro:每次页面request,SecurityUtils.getSubject() 返回不同的值

@eyelee 你好,想跟你请教个问题: jfinal整合shiro,shiro权限的使用中,每次页面request,SecurityUtils.getSubject() 得到的subject 不一样, SecurityUtils.java public static Subject...

andylive
2013/07/30
32.7K
10
getsession().getId() 与 getRequestSessionId()的区别

登陆时shiro验证,并在session里面写入相应的值 登陆后,在filter获取session 打印结果 浏览器保存的jssionid是95d5d86f-bafa-474a-b457-b60a5f661def 疑问: 1)为什么在session里面获取不到...

小昭归来
2014/12/17
8K
3
shiro 前端页面判断

@黄勇 你好,想跟你请教个问题: 有个问题请教下,shiro在前端页面,能不能判断说,当前用户的角色是teacher,并且当前课程Id是指定的Id? 不知道怎么用专业术语表达了,我现在做一个项目关于...

水忘此处
2014/10/27
1K
3
30分钟学会如何使用Shiro

一、架构 要学习如何使用Shiro必须先从它的架构谈起,作为一款安全框架Shiro的设计相当精妙。Shiro的应用不依赖任何容器,它也可以在JavaSE下使用。但是最常用的环境还是JavaEE。下面以用户登...

qq5923dd411b8fa
2017/05/23
0
0
30分钟学会如何使用Shiro

摘要: Shiro的核心部分是SecurityManager,它负责安全认证与授权。Shiro本身已经实现了所有的细节,用户可以完全把它当做一个黑盒来使用。SecurityUtils对象,本质上就是一个工厂类似Spring中...

qq592fbb5b34ad7
2017/06/07
0
0
关于springmvc+ shiro在身份校验的时候总是返回true

@boonya 你好,想跟你请教个问题: shiro-config.xml

少不读水浒
2015/07/21
777
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
0
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
12
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
1
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
1
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
0
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
2
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部