shiro 认证

目录

1.继承shiro

1.1 导入以来包

1.2 web.xml配置

2.开发自定义Realm

2.1创建数据库测试数据表

2.2Modle

2.3编写后台支持服务

2.3.1 定义mapper接口

2.32 mybatis配置文件

2.3.3编写service及接口

2.4单元测试

2.5编写自定义的Realm

2.6配置文件

2.7登录Controller

2.8登录界面

3.加密

3.1工具类

3.2shiro加密认证

3.2.1spring中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 创建测试数据表

2.2 Model

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

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 工具类

注: 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中使用加密

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值