• SSM整合


      Spring和整合实际上最大的特点就是可以交由Spring实现shiro的管理控制,实际上这种整合才属于新一代的SSM开发框架整合(Spring+Shiro+MyBatis)。

      SSH:Spring + Struts + Hibernate,但是后来Struts框架没落了;

      SSM一代:Spring + SpringMVC + MyBatis,SpringMVC本来就属于Spring的一部分;

      SSM二代:Spring + Shiro + MyBatis;

    一、Spring整合Shiro:

      1. 修改pom.xml配置文件,引入Shiro与Spring要整合的依赖库:

    <dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    </dependency>
    <dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-web</artifactId>
    </dependency>
    <dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    </dependency>

    2. 修改web.xml配置文件,通过过滤器集成shiro:

      》 DelegatingFilterProxy 实际上是 Filter 的一个代理对象. 默认情况下, Spring 会到 IOC 容器中查找和 <filter-name> 对应的 filter bean. 也可以通过 targetBeanName 的初始化参数来配置 filter bean 的 id.

    <!-- 配置Shiro的 shiroFilter -->
        <filter>
            <filter-name>shiroFilter</filter-name>
            <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
            <init-param>
                <param-name>targetFilterLifecycle</param-name>
                <param-value>true</param-value>
            </init-param>
    <!--    <init-param>
                <param-name>targetBeanName</param-name>
                <param-value>shiroFilter</param-value>
            </init-param>-->
        </filter>
        <filter-mapping>
            <filter-name>shiroFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

    3. 定义Realm:

    // 此处不使用扫描配置,通过bean配置文件的模式来完成
    public class MemberRealm extends AuthorizingRealm {
        @Autowired
        private IMemberService memberService ;
        @Autowired
        private IMemberPrivilegeService memberPrivilegeService ;
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
            System.err.println("【1】{MemberRealm}============== 用户认证处理 ==============");
            String mid = (String) token.getPrincipal() ;
            Member member = this.memberService.get(mid) ; // 根据mid查询用户信息
            if (member == null) {   // 用户信息不存在
                throw new UnknownAccountException(mid + "账户信息不存在!") ;
            }
            String password = new String((char[]) token.getCredentials()) ;
            if (!member.getPassword().equals(password)) {   // 密码不同
                throw new IncorrectCredentialsException("错误的用户名或密码!");
            }
            if (member.getLocked().equals(1)) { // 用户锁定了
                throw new LockedAccountException(mid + "账户已经被锁定!");
            }
            return new SimpleAuthenticationInfo(token.getPrincipal(),token.getCredentials(),this.getName());
        }
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
            System.err.println("【2】{MemberRealm}************** 用户授权处理 **************");
            Map<String, Set<String>> map = this.memberPrivilegeService.getByMember((String) principals.getPrimaryPrincipal());
            // 将所有获取的授权信息保存在AuthorizationInfo类的实例之中
            SimpleAuthorizationInfo authz = new SimpleAuthorizationInfo() ; // 返回的授权信息
            authz.setRoles(map.get("allRoles"));
            authz.setStringPermissions(map.get("allActions"));
            return authz;
        }
    }
    

    4. 定义shiro的配置文件“spring-shiro.xml”:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd">
        <!-- 1、Shiro整合处理的时候,Realm是整合业务层(RPC端)的核心处理综合点 -->
        <bean id="memberReam" class="com.yootk.ssm.realm.MemberRealm"/>
        <!-- 2、整个的Shiro里面最为重要的就是SecurityManager,这个类之中需要追加realm配置 -->
        <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
            <property name="realm" ref="memberReam"/>   <!-- 配置要使用的Realm处理程序 -->
        </bean>
        <!-- 3、 在Spring中配置有关Shiro的全部的过滤器的定义,这个名称必须与web.xml文件保持一致-->
        <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
            <property name="securityManager" ref="securityManager"/>
            <property name="loginUrl" value="/login.action"/> <!-- 配置登录页 -->
            <property name="filterChainDefinitions"><!-- 检测路径 -->
                <value>
                    /pages/**=authc
                </value>
            </property>
        </bean>
    </beans>
  • 相关阅读:
    《团队作业第三、第四周》五小福团队作业--Scrum 冲刺阶段--Day7
    《团队作业第三、第四周》五小福团队作业--Scrum 冲刺阶段--Day6
    《团队作业第三、第四周》五小福团队作业--Scrum 冲刺阶段--Day5
    《团队作业第三、第四周》五小福团队作业--Scrum 冲刺阶段--Day4
    《团队作业第三、第四周》五小福团队作业--Scrum 冲刺阶段--Day3
    《团队作业第三、第四周》五小福团队作业--Scrum 冲刺阶段--Day2
    20172328--蓝墨云班课实验--哈夫曼树的编码
    《团队作业》五小福团队--UNO的博客链接汇总
    《团队作业第三、第四周》五小福团队作业--Scrum 冲刺阶段--Day1--领航
    题目 2239: [蓝桥杯][算法训练]动态数组使用(Java)
  • 原文地址:https://www.cnblogs.com/luliang888/p/11160582.html
Copyright © 2020-2023  润新知