细节:

---[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. Redis单机数据迁移至Sentinel集群

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  2. Spring Cloud实战之初级入门(五)— 配置中心服务化与配置实时刷新

    目录 1.环境介绍 2.配置中心服务化 2.1 改造mirco-service-spring-config 2.2 改造mirco-service-provider.mirco-service-con ...

  3. spring和springboot常用注解总结

    @ConfigurationProperties 可以非常方便的把资源文件中的内容绑定到对象上   @Value("${app.name}") 注入简单值 @Import 通过导入 ...

  4. Tomcat服务器配置和使用(三)

    https连接器 明白了互联网上的加密原理之后,下面来看看浏览器与服务器交互时,浏览器想将数据加密后再发送给服务器,那么该怎么做呢?服务器首先要向浏览器出示一份数字证书,浏览器看到数字证书后,就可以使 ...

  5. svn的使用总结

    在网上看到了以前介绍非常全的svn的文章,拿来分享 原文网址  http://www.cnblogs.com/jx270/archive/2013/03/04/2943595.html 还有一篇更基础 ...

  6. thinkphp多表联合查询

    1.两个表查询 $userid=session('user.id'); $user = M('cuser'); $data = $user->field('projectno')->whe ...

  7. vue-i18n国际化实例

    demo 场景需求分析 需求很简单,左上角 ''网易云音乐''就是一个中英文切换的按钮,点击弹出提示框,确认切换语言后,实现英文版本. 切换成英文版本: 三.实现国际化 1.我们得先有开发环境,先有项 ...

  8. 深入理解javascript原型和闭包_____全部

    http://www.cnblogs.com/wangfupeng1988/p/3977924.html

  9. [WC2016]挑战NPC

    Sol 这做法我是想不到\(TAT\) 每个筐子拆成三个相互连边 球向三个筐子连边 然后跑一般图最大匹配 这三个筐子间最多有一个匹配 那么显然每个球一定会放在一个筐子里,一定有一个匹配 如果筐子间有匹 ...

  10. react+javascript前端进阶

    组合1: react技术栈(react(阮一峰react入门,官网教程).redux(阮一峰redux入门,官网教程).saga)+JS(ES6)+antd+you don`t know JS(上中下 ...