细节:

---[urls]部分配置,其格式是    url=拦截器【参数】 ,拦截器【参数】
---如果当前请求的 url 匹配 【urls】 部分或者某个url模式,将会执行配置的拦截器
---anon(anonymous)拦截器表示匿名访问(即不需要登陆验证)
---authc(authentication)拦截器的表示需要身份认证之后才能访问
<property name="filterChainDefinitions">
<value>
/login.jsp = anon
# everything else requires authentication:
/** = authc
</value>
</property>

               /login.jsp = anon
# everything else requires authentication:
/** = authc
/user.jsp = anon

此时上面的会覆盖下面的user.jsp 无法访问

 认证:

步骤:
1.获取当前subject,SecurityUtils.getSubject();
2.测试当前用户是否已经被认证,即是否已经登陆, currentUser.isAuthenticated()
3.若没有认证则/把用户名和密码封装为UsernamePasswordToken对象
    -创建一个表单
    -把请求提交到spriingmvc 的handler
    -获取用户和密码
4.执行登陆 currentUser.login(token);
5.自定义Relam方法,从数据库中获取相应的记录,返回给Shiro
    -实际上是需要集成org.apache.shiro.realm.AuthenticatingRealm
    -实现doGetAuthenticationInfo()方法
6.有shiro完成对密码的比对

测试使用到的文件:

下面开始代码过程:
login.jsp页面的登陆标志代码:
    login
<form action="shiro/login" method="post">
username:<input type="text" name="username">
password:<input type="password" name="password">
<input type="submit" value="submit">
</form>
 
在application中
<property name="filterChainDefinitions">
<value>
/login.jsp = anon
/shiro/login = anon
# everything else requires authentication:
/** = authc
</value>
</property>

ShiroHandler.java

@Controller
@RequestMapping("/shiro")
public class ShiroHandler {
@RequestMapping("/login")
public String login(@RequestParam("username")String username,@RequestParam("password") String password){ Subject currentUser = SecurityUtils.getSubject();
if (!currentUser.isAuthenticated()) {
//把用户名和密码封装为UsernamePasswordToken对象
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
token.setRememberMe(true);
try {
//执行登陆
currentUser.login(token);
}catch (AuthenticationException ae) {
System.out.println("登陆失败" + ae.getMessage());
}
} 成功之后做重定向
return "redirect:/list.jsp";
}
}

在applicationContext中需要扫描这个类的包

ShiroRealm.java

做登陆验证实现下面的接口即可
doGetAuthenticationInfo(AuthenticationToken arg0)的arg0是指就是UsernamePasswordToken token = new  UsernamePasswordToken(username, password);
public class ShiroRealm extends AuthenticatingRealm {

    @Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken arg0) throws AuthenticationException {
System.out.println("doGetAuthenticationInfo" + arg0); //1.把AuthenticationToken转为UsernamePasswordToken
UsernamePasswordToken upToken = (UsernamePasswordToken) arg0; //2.从UsernamePasswordToken获取username
String username = upToken.getUsername(); //3.调用数据库的方法,从数据库查询username对应的用户记录
System.out.println("从数据库中获取username:" + username); //4.若用户不存在可以抛出异常 UnKnownAccountException异常
if("unknow".equals(username)){
throw new UnknownAccountException("username 不存在");
}
//5.根据用户信息的清空决定是否需要抛出其他的异常
if("monster".equals(username)){
throw new LockedAccountException("用户被锁定");
}
//6.根据用户的情况来构建AuthenticationInfo并且返回
//以下信息是从数据库中获取的
//principal:认证的实体信息,可以是username,也可以是数据表对应的实体对象
Object principal = username;
//credentials:密码
Object credentials = "";
//realmName:当前realm对象为name,调用父类的getName()方法即可
String realmName = getName();
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(principal, credentials, realmName); return info;
}
}

当我们输入密码为1234,以及其他为username(除了上图的两个)
此时我们就有权限对其他的页面进行测试

出错之后的异常还是会打印的

 此时我们需要登出的操作

list.jsp
<body>
list. <a href="shiro/logout">Logout</a>
</body>

在applicationContext.xml文件中:

  <!--
配置那些页面需要受保护,以及访问这些页面需要的的权限 )anon 可以被匿名访问
)authc 必须认证即登陆后才可以访问的页面
3).logout登出
-->
<property name="filterChainDefinitions">
<value>
/login.jsp = anon
/shiro/login = anon
/shiro/logout = logout # everything else requires authentication:
/** = authc
</value>
</property>

但我们点击这个超链接的 时候就会立马退出来到login.jsp页面中

shiro权限配置的细节问题&认证的更多相关文章

  1. (转) shiro权限框架详解04-shiro认证

    http://blog.csdn.net/facekbook/article/details/54906635 shiro认证 本文介绍shiro的认证功能 认证流程 入门程序(用户登录和退出) 自定 ...

  2. 学习Spring Boot:(十三)配置 Shiro 权限认证

    经过前面学习 Apache Shiro ,现在结合 Spring Boot 使用在项目里,进行相关配置. 正文 添加依赖 在 pom.xml 文件中添加 shiro-spring 的依赖: <d ...

  3. Shiro入门之一 -------- Shiro权限认证与授权

    一  将Shirojar包导入web项目 二 在web.xml中配置shiro代理过滤器 注意: 该过滤器需要配置在struts2过滤器之前 <!-- 配置Shiro的代理过滤器 -->  ...

  4. 4.SSM配置shiro权限管理

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.搭建SSM项目: http://www.cnblogs.com/yysbolg/p/6909021.html ...

  5. shiro权限认证与授权

    什么是shiro? Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权.加密.会话管理等功能,组成了一个通用的安全认证框架. 为什么要用sh ...

  6. Shiro 权限管理filterChainDefinitions过滤器配置

    博客转载:http://blog.csdn.net/userrefister/article/details/47807075 /** * Shiro-1.2.2内置的FilterChain * @s ...

  7. 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)

    前言: shiro因为其简单.可靠.实现方便而成为现在最常用的安全框架,那么这篇文章除了会用简洁明了的方式讲一下基于spring的shiro详细配置和登录注销功能使用之外,也会根据惯例在文章最后总结一 ...

  8. xml配置文件中对于Shiro 权限管理filterChainDefinitions过滤器配置

    博客转载:http://blog.csdn.net/userrefister/article/details/47807075 /** * Shiro-1.2.2内置的FilterChain * @s ...

  9. Springboot2.0 集成shiro权限管理

    在springboot中结合shiro教程搭建权限管理,其中几个小细节的地方对新手不友好,伸手党更是无法直接运行代码,搭建过程容易遇坑,记录一下.关键的地方也给注释了. 版本:springboot版本 ...

随机推荐

  1. [转]nopCommerce 3.9 版本发行

    本文转自:http://www.cnblogs.com/xoray007/p/nopCommerce-39-release.html NopCommerce中文信息地址:http://www.nopc ...

  2. Spring学习笔记:Spring整合Mybatis学习PPT(三:整合思路)

    三.Spring-Mybatis的整合思路

  3. javaweb之jsp指令

    1.JSP指令简介 JSP指令是为JSP引擎设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令:page指令,Include指 ...

  4. Binder or AIDL的最简单实践

    1.前言: 在Android开发中多进程的合理使用+进程间通信的IPC是一个比较难的点.特别是Android特有的Binder机制,非常复杂,对于应用层开发的初级开发工程师强求深入理解Binder机制 ...

  5. JDK自带工具keytool生成ssl证书 和 HTTPS双向认证

    创建证书(第一步) keytool -genkey -alias "baidu" -keypass "123456" -keystore "D:/ba ...

  6. Django 中间件实现用户认证与IP频率限制

    1.URL访问过滤 通过装饰器进行用户认证非常方便,但是在添加部分需要认证的功能时,就需要再次添加装饰器,如果通过中间件来实现,就不需要再进行添加的操作. import re LOGIN_URL = ...

  7. 三重for循环实现对二维数组的按列排序(JavaScript)

    由C语言联想到的:三重for循环实现对二维数组的按列排序,并且牵扯到数据结构. 自己写的,水平有限,本文属于原创,可能存在错误,忘指正~ function circle() { var a = [ [ ...

  8. Android蓝牙自动配对Demo,亲测好使!!!

    蓝牙自动配对,即搜索到其它蓝牙设备之后直接进行配对,不需要弹出配对确认框或者密钥输入框. 转载请注明出处http://blog.csdn.net/qq_25827845/article/details ...

  9. hdu 1159 Common Subsequence(LCS)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  10. 第4课 简易浏览器-WebViewer组件的使用方法

    做一个手机浏览器,需要哪些组件呢? 一.组件设计 二.组件属性及命名修改 三.逻辑设计 1.导航按钮代码:前进.后退.主页 2.访问网页按钮 1)根据用户在地址栏输入的地址书写,判断书写中是否含有“h ...