1.添加依赖

 1  <!-- shiro -->
 2         <dependency>
 3             <groupId>org.apache.shiro</groupId>
 4             <artifactId>shiro-core</artifactId>
 5             <version>1.4.0</version>
 6         </dependency>
 7         <dependency>
 8             <groupId>org.apache.shiro</groupId>
 9             <artifactId>shiro-spring</artifactId>
10             <version>1.4.0</version>
11         </dependency>

View Code

2.ApplicationContext-mvc.xml配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:mvc="http://www.springframework.org/schema/mvc"
 5        xmlns:context="http://www.springframework.org/schema/context"
 6        xmlns:task="http://www.springframework.org/schema/task"
 7        xsi:schemaLocation="http://www.springframework.org/schema/beans
 8         http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
 9         http://www.springframework.org/schema/mvc
10         http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
11         http://www.springframework.org/schema/context
12         http://www.springframework.org/schema/context/spring-context-4.3.xsd
13         http://www.springframework.org/schema/task
14         http://www.springframework.org/schema/task/spring-task.xsd
15         ">
16
17     <mvc:annotation-driven/>
18     <mvc:default-servlet-handler/>
19
20     <context:component-scan base-package="com.wfd360.controller"/>
21
22     <!-- 未认证或未授权时跳转必须在springmvc里面配,spring-shiro里的shirofilter配不生效 -->
23     <bean   class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
24         <property name="exceptionMappings">
25             <props>
26                 <!--表示捕获的异常 -->
27                 <prop key="org.apache.shiro.authz.UnauthorizedException">
28                     <!--捕获该异常时跳转的路径 -->
29                     /403
30                 </prop>
31                 <!--表示捕获的异常 -->
32                 <prop key="org.apache.shiro.authz.UnauthenticatedException">
33                     <!--捕获该异常时跳转的路径 -->
34                     /403
35                 </prop>
36             </props>
37         </property>
38     </bean>
39
40
41
42     <!-- 配置SpringMVC的视图解析器 -->
43     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
44         <property name="prefix" value="/WEB-INF/jsp/"/>
45         <property name="suffix" value=".jsp"/>
46     </bean>
47
48    <import resource="classpath:spring-shiro.xml"/>
49
50 </beans>

View Code

3.spring-shiro.xml配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 5     <!--开启shiro的注解-->
 6     <bean id="advisorAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
 7         <property name="proxyTargetClass" value="true"></property>
 8     </bean>
 9     <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"/>
10     <!--注入自定义的Realm-->
11     <bean id="customRealm" class="com.wfd360.shiro.CustomRealm"></bean>
12     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
13         <property name="realm" ref="customRealm"></property>
14     </bean>
15
16     <!--配置ShiroFilter-->
17     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
18         <property name="securityManager" ref="securityManager"></property>
19         <!--登入页面-->
20         <property name="loginUrl" value="/login.jsp"></property>
21         <!--登入成功页面-->
22         <property name="successUrl" value="/index.jsp"/>
23        <!-- <property name="filters">
24             <map>
25                 &lt;!&ndash;退出过滤器&ndash;&gt;
26                 <entry key="logout" value-ref="logoutFilter" />
27             </map>
28         </property>-->
29         <!--URL的拦截-->
30         <property name="filterChainDefinitions" >
31             <value>
32                 /share = authc
33                 /logout = logout
34             </value>
35         </property>
36
37     </bean>
38     <!--自定义退出LogoutFilter-->
39    <!-- <bean id="logoutFilter" class="com.test.filter.SystemLogoutFilter">
40         <property name="redirectUrl" value="/login"/>
41     </bean>-->
42 </beans>

View Code

4.创建对象 CustomRealm.java

 1 package com.wfd360.shiro;
 2
 3 import org.apache.shiro.authc.AuthenticationException;
 4 import org.apache.shiro.authc.AuthenticationInfo;
 5 import org.apache.shiro.authc.AuthenticationToken;
 6 import org.apache.shiro.authc.SimpleAuthenticationInfo;
 7 import org.apache.shiro.authz.AuthorizationInfo;
 8 import org.apache.shiro.authz.SimpleAuthorizationInfo;
 9 import org.apache.shiro.realm.AuthorizingRealm;
10 import org.apache.shiro.subject.PrincipalCollection;
11
12 import java.util.ArrayList;
13 import java.util.List;
14
15 /**
16  * @author www.wfd360.com
17  * @date 2018/2/26 14:05
18  */
19 public class CustomRealm extends AuthorizingRealm {
20     /**
21      * 授权
22      * @param principalCollection
23      * @return
24      */
25     @Override
26     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
27         String userName = (String) principalCollection.getPrimaryPrincipal();
28         List<String> permissionList=new ArrayList<String>();
29         permissionList.add("user:add");
30         permissionList.add("user:delete");
31         if (userName.equals("zhou")) {
32             permissionList.add("user:query");
33         }
34         SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();
35         info.addStringPermissions(permissionList);
36         info.addRole("admin");
37         return info;
38     }
39     /**
40      * 认证
41      * @param authenticationToken
42      * @return
43      * @throws AuthenticationException
44      */
45     @Override
46     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
47         String userName = (String) authenticationToken.getPrincipal();
48         if ("".equals(userName)) {
49             return  null;
50         }
51         SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(userName,"123456",this.getName());
52         return info;
53     }
54 }

View Code

5.控制层ShiroController.java对象

 1 package com.wfd360.controller;
 2
 3 import org.apache.shiro.SecurityUtils;
 4 import org.apache.shiro.authc.IncorrectCredentialsException;
 5 import org.apache.shiro.authc.UnknownAccountException;
 6 import org.apache.shiro.authc.UsernamePasswordToken;
 7 import org.apache.shiro.subject.Subject;
 8 import org.springframework.stereotype.Controller;
 9 import org.springframework.ui.Model;
10 import org.springframework.web.bind.annotation.RequestMapping;
11 import org.springframework.web.bind.annotation.RequestMethod;
12
13 /**
14  * Created by Administrator on 2018/10/29.
15  */
16 @Controller
17 public class ShiroController {
18
19     @RequestMapping(value = "/loginData", method = RequestMethod.POST)
20     public String login(String userName, String passwd, Model model) {
21         Subject subject = SecurityUtils.getSubject();
22         UsernamePasswordToken token = new UsernamePasswordToken(userName, passwd);
23         try {
24             subject.login(token);
25         } catch (UnknownAccountException e) {
26             e.printStackTrace();
27             model.addAttribute("userName", "用户名错误!");
28             return "login";
29         } catch (IncorrectCredentialsException e) {
30             e.printStackTrace();
31             model.addAttribute("passwd", "密码错误");
32             return "login";
33         }
34         return "index";
35     }
36
37     @RequestMapping(value = "/index2")
38     public String index() {
39         System.out.println("------index-------");
40         return "login";
41     }
42 }

View Code

6.登陆jsp页面login.jsp

 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: Administrator
 4   Date: 2018/10/29
 5   Time: 11:51
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9 <html>
10 <head>
11     <title>登陆界面</title>
12 </head>
13 <body>
14 <h2>登陆界面</h2>
15 <form action="/loginData" method="post">
16     用户名:<input name="userName">
17     密码:<input name="passwd">
18     <input type="submit">
19 </form>
20 </body>
21 </html>

View Code

7.web.xml配置

 1 <!-- shiro 过滤器 start -->
 2     <filter>
 3         <filter-name>shiroFilter</filter-name>
 4         <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
 5         <!-- 设置true由servlet容器控制filter的生命周期 -->
 6         <init-param>
 7             <param-name>targetFilterLifecycle</param-name>
 8             <param-value>true</param-value>
 9         </init-param>
10     </filter>
11     <filter-mapping>
12         <filter-name>shiroFilter</filter-name>
13         <url-pattern>/*</url-pattern>
14     </filter-mapping>
15     <!-- shiro 过滤器 end -->

View Code

8.测试完成!

转载于:https://www.cnblogs.com/newAndHui/p/9870383.html

shiro 基于springmvc中做登陆功能相关推荐

  1. springmvc整合shiro做登陆权限控制,使用mongodb存储session

    公司模块分得比较细,一直给自己的模块做后台数据处理,对前端和登陆验证权限等操作遗忘很多,于是研究了一下公司目前的后台登录结构,用了shiro验证登录和授权,使用mongodb作为sessiondao实 ...

  2. B/S基于springMVC的网上选课系统(功能齐全javaweb)

    自己在课设上写的,基于springMVC的网上选课系统. 使用说明: windows系统 java环境和tomcat环境 mysql数据库   用户名root  密码root eclipse需配置jr ...

  3. python openstack vpc互通_深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(二)-带宽控制...

    在VPC功能实现第一篇中,简单介绍了一下VPC网络对租户间隔离能力的提升以及基于路由提供的一系列网络功能.在这一篇中,将继续介绍VPC网络中十分重要的一个内容:网络带宽的控制,共享以及分离. 首先是对 ...

  4. Java中使用MVC三层架构做登陆验证

    这里主要的内容是有关Java中MVC三层架构 目录 原始的登陆验证 分层改进(每个代码都是登录和验证两个功能) 使用分层想法做登陆验证 User类 表现层 业务层 持久层 原始的登陆验证 原始的登陆验 ...

  5. 深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(三)-路由与隧道...

    https://www.cnblogs.com/opsec/p/7016631.html 在系列的上一篇, 深入浅出新一代云网络--VPC中的那些功能与基于OpenStack Neutron的实现(二 ...

  6. 游戏陪玩系统源码开发,实现登陆功能需要如何做?

    登录功能的实现,是用户使用游戏陪玩系统源码的第一步,如果登录功能都没有开发好,那就无法给用户留下好的第一印象,所以今天我们就一起来看看在游戏陪玩系统源码开发中,实现登陆功能需要如何做吧. Login. ...

  7. python openstack vpc互通_深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(一)-简述与端口转发...

    VPC的概念与基于vxlan的overlay实现很早就有了,标题中的"新"只是一个和传统网络的相对概念.但从前年开始,不同于以往基础网络架构的新一代SDN网络才真正越来越多的走进国 ...

  8. js php通讯录,基于aotu.js实现微信自动添加通讯录中的联系人功能

    什么是Auto.JS? Auto.JS是Android平台上的JavaScript自动化工具. 它的本质是可执行自己编写的简易Javascript脚本的,尤其可以在开启"无障碍模式" ...

  9. 基于云开发的答题活动小程序v2.0-用云开发的聚合能力实现从题库中随机出题功能

    项目技术栈 微信原生小程序+云开发.为什么选择微信原生小程序进行开发呢?因为能够直接应用它的云开发能力吖. 我这里主要使用了云开发能力中的小程序端SDK,说白了就是在javascript中就能直接操作 ...

最新文章

  1. 批处理+定时任务实现定时休息提醒
  2. 实施Kubernetes可以实现多云架构安全
  3. php array 关联数组,php array_merge关联数组
  4. 修改中断向量ESC退出
  5. sql server密钥
  6. 网页优化中,网站页面结构该注意什么?
  7. Python自学之乐-Python字典实现简单的三级菜单
  8. ResourceBundle 读取properties文件中文乱码
  9. 进位和借位问题的研究
  10. m_map投影_MATLAB——m_map指南(1)
  11. java中一个对象占多少字节
  12. word转简洁html工具,Convert Word to HTML(Word转HTML工具)
  13. 垃圾盒制作过程大揭密!
  14. 论文查找ICCV ECCV CVPR
  15. python整形怎么切片_遥感影像切分切片
  16. 使用神经网络识别手写数字
  17. Java下载文件时文件名出现乱码(但文件内容正常)
  18. 视觉定位领域专栏(二)常用数据集介绍
  19. opera浏览器修改默认搜索引擎为百度
  20. ASO优化|标题、描述、关键词的最优策略

热门文章

  1. 二阶齐次线性微分方程的通解公式_数学考研辅导(数二)063|高数常微分方程6
  2. Python入门--列表元素的增加操作,append(),extend(),insert(),切片
  3. 操作系统—进程同步与互斥问题之生产者消费者问题,附赠PV操作题解题思路(思维导图版)
  4. 由一维数组创建小根堆
  5. [PyTorch] 基于Python和PyTorch的线性拟合
  6. hadoop相关问题
  7. matlab2c使用c++实现matlab函数系列教程-conv函数
  8. 汇编:在BUFFER中定义了的十个带符号字,将其中的负数变成绝对值,并以十进制方式输出
  9. 磁盘I/O高居不下,通过什么来查看占用I/O的进程?
  10. 事务背书 ACID, CAP, BASE