Shiro——认证

目录

  • 1. 集成shiro
    • 1.1 导入依赖的包
    • 1.2 web.xml配置
  • 2. 开发自定义Realm
    • 2.1 创建测试数据表
    • 2.2 Model
    • 2.3 编写后台支持服务
      • 2.3.1 定义mapper接口:
      • 2.3.2 mybatis配置文件:
      • 2.3.3 编写service及接口,(接口截图忽略)
    • 2.4 单元测试
    • 2.5 编写自定义的Realm
    • 2.6 配置文件
    • 2.7 登录Controller
    • 2.9 登录页面
  • 3. 加密
    • 3.1 工具类
    • 3.2 shiro加密认证
      • 3.2.1 spring中bean的配置
      • 3.2.2 自定义Realm中使用加密

1. 集成shiro

1.1 导入依赖的包

导入shiro需要的依赖包

<shiro-version>1.2.5</shiro-version>

<dependency>    
    <groupId>org.apache.shiro</groupId>    
    <artifactId>shiro-core</artifactId>    
    <version>${shiro-version}</version>
</dependency>
    <dependency>    
    <groupId>org.apache.shiro</groupId>    
    <artifactId>shiro-web</artifactId>    
    <version>${shiro-version}</version>
    </dependency>
<dependency>    
    <groupId>org.apache.shiro</groupId>    
    <artifactId>shiro-spring</artifactId>    
    <version>${shiro-version}</version>
</dependency>

1.2 web.xml配置

<!-- shiro -->
<filter>    
    <filter-name>shiroFilter</filter-name>    
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>    
    <filter-name>shiroFilter</filter-name>    
    <url-pattern>/*</url-pattern>
</filter-mapping>

2. 开发自定义Realm

2.1 创建测试数据表

随课件提供的资料目录中有脚本(shiro-data.sql)

2.2 Model

生成系统用户表(t_sys_user)对应的model,Idea中可以使用Hibernate查询生成,具体步骤省略。

2.3 编写后台支持服务

编写对应的service,mapper(数据访问层)的实现(service,mapper接口,及对应的xml)

2.3.1 定义mapper接口:

 

2.3.2 mybatis配置文件:

 

<resultMap id="userMap" type="com.zking.mybatis01.model.TSysUser">    
    <id column="userid" property="userid" javaType="java.lang.Integer"/>    
    <result column="username" property="username" javaType="java.lang.String"/>    
    <result column="PASSWORD" property="password" javaType="java.lang.String"/>    
    <result column="salt" property="salt" javaType="java.lang.String"/>    
    <result column="createdate" property="createdate" javaType="java.util.Date"/>
</resultMap>

2.3.3 编写service及接口

2.4 单元测试

对service进行单元测试

 

2.5 编写自定义的Realm

shiro中的Realm UML:

 

 

2.6 配置文件

添加spring相关配置,使用自定义Realm进行认证 (资料:applicationContext-shiro.xml)

<!--配置自定义的Realm-->
<bean id="shiroRealm" class="com.zking.mybatis01.shiro.UserRealm">
</bean>

<!--注册安全管理器-->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <property name="realm" ref="shiroRealm" />
</bean>

    <!--Shiro核心过滤器-->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <!-- Shiro的核心安全接口,这个属性是必须的 -->
        <property name="securityManager" ref="securityManager" />
        <!-- 身份验证失败,跳转到登录页面 -->
        <property name="loginUrl" value="/"/>
        <!-- 身份验证成功,跳转到指定页面 -->
        <!--<property name="successUrl" value="/index.jsp"/>-->
        <!-- 权限验证失败,跳转到指定页面 -->
        <!--<property name="unauthorizedUrl" value="/user/noauthorizeUrl"/>-->
        <!-- Shiro连接约束配置,即过滤链的定义 -->
        <property name="filterChainDefinitions">
            <value>
                <!--
                注:anon,authcBasic,auchc,user是认证过滤器
                    perms,roles,ssl,rest,port是授权过滤器
                -->
                <!--anon 表示匿名访问,不需要认证以及授权-->
                <!--authc表示需要认证 没有进行身份认证是不能进行访问的-->
                <!--roles[admin]表示角色认证,必须是拥有admin角色的用户才行-->
                /user/login=anon
                /book/**=authc
                /common/**=authc
                <!-- /css/**           = anon
                 /images/**            = anon
                 /js/**                = anon
                 /                     = anon
                 /user/logout          = logout
                 /user/**              = anon
                 /userInfo/**          = authc
                 /dict/**              = authc
                 /console/**           = roles[admin]
                 /**                   = anon-->
            </value>
        </property>
    </bean>

    <!-- Shiro生命周期,管理shiro bean的生命周期 -->
    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>

2.7 登录Controller

2.9 登录页面

 

 

<body>    
    <h1>登录页面</h1>    
    ${message}    
    <form id="loginForm" action="<%=request.getContextPath()%>/user/login" method="post">
       <input type="text" id="username" name="username"/> <br/>       
       <input type="text" id="password" name="password"/>  <br/>      
       <input type="submit" value="登录"/>    
    </form>
 </body>

通过登录页面验证用户认证。

3. 加密

3.1 工具类

随课件提供工具类:PasswordHelper.java,该类用于演示,shiro中有自己的MD5实现。

注: MD5
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5算法是不可逆的,即便得到了加密以后的密文,也不可能通过解密算法反算出明文。
用途:
1)密码管理,如用户密码的MD5加密后再保存数据库
2)电子签名,MD5 算法还可以作为一种电子签名的方法来使用,使用 MD5算法就可以为任何文件(不管其大小、格式、数量)产生一个独一无二的“数字指纹”,借助这个“数字指纹”,通过检查文件前后 MD5 值是否发生了改变,就可以知道源文件是否被改动。(回想一下JWT的令牌签名)

3.2 shiro加密认证

3.2.1 spring中bean的配置

配置自定义的Realm。

 

<!--配置自定义的Realm-->
<bean id="shiroRealm" class="com.zking.mybatis01.shiro.UserRealm">    
    <property name="credentialsMatcher">        
        <bean id="credentialsMatcher"class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">           
            <!--指定hash算法为MD5-->            
            <property name="hashAlgorithmName" value="md5"/>            
            <!--指定散列次数为1024次-->            
            <property name="hashIterations" value="1024"/>            
            <!--true指定Hash散列值使用Hex加密存. false表明hash散列值用用Base64-encoded存储-->
            <property name="storedCredentialsHexEncoded" value="true"/>       
        </bean>    
    </property>
</bean>

3.2.2 自定义Realm中使用加密

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值