安全验证框架shiro(三)

原文链接: https://my.oschina.net/suspring/blog/1852816

主要还是对shiro在web项目使用的一下简要说明与实例。

首先看该项目配置相关的信息,使用的idea,创建maven项目,并在pom.xml中加入如下依赖: 

        
        
            org.slf4j
            slf4j-api
            1.7.21
        
        
            org.slf4j
            jcl-over-slf4j
            1.7.21
            runtime
        
        
            ch.qos.logback
            logback-classic
            1.1.7
            runtime
        

        
            commons-dbcp
            commons-dbcp
            1.4
        
        
            mysql
            mysql-connector-java
            5.1.41
        
        
        
            org.apache.shiro
            shiro-core
            ${shiro.version}
        
        
            org.apache.shiro
            shiro-web
            ${shiro.version}
        
       
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        
        
            javax.servlet.jsp
            jsp-api
            2.1
        
        
            jstl
            jstl
            1.2
        

同时web.xml配置如下:




    shiro-simple-web

    
        shiroConfigLocations
        /WEB-INF/shiro.ini
    

    
        org.apache.shiro.web.env.EnvironmentLoaderListener
    

    
        ShiroFilter
        org.apache.shiro.web.servlet.ShiroFilter
        
            
            
        
    

    
        ShiroFilter
        /*
        REQUEST
        FORWARD
        INCLUDE
        ERROR
    

由于没有借助spring等工具,shiro相关的配置通过shrio.ini完成:

[main]
#form提交的地址必须是authc.loginUrl相同
authc.loginUrl = /login.jsp
authc.successUrl= /pages/index.html
roles.unauthorizedUrl = nonrole.jsp
perms.unauthorizedUrl =  nunperm.jsp

#securityManager=org.apache.shiro.mgt.DefaultWebSecurityManager
dataSource=org.apache.commons.dbcp.BasicDataSource
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.url=jdbc:mysql://127.0.0.1:3306/shiro
dataSource.username=root
dataSource.password=123456

jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource=$dataSource
myRealm=com.sucl.shiro.realm.MyRealm
securityManager.realms=$jdbcRealm
#多realm
#覆盖默认的securityManager
#securityManager=org.apache.shiro.mgt.DefaultSecurityManager

#authenticator
#authenticator=org.apache.shiro.authc.pam.ModularRealmAuthenticator
#authenticationStrategy=org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy
#authenticator.authenticationStrategy=$authenticationStrategy
#securityManager.authenticator=$authenticator

#authorizer
#authorizer=org.apache.shiro.authz.ModularRealmAuthorizer
#permissionResolver=org.apache.shiro.authz.permission.WildcardPermissionResolver
#authorizer.permissionResolver=$permissionResolver
#securityManager.authorizer=$authorizer

[urls]
/login.jsp = authc
/index.jsp = authc
/logout = logout
/static/** = anon
/pages/** = authc
/** = authc

之前是通过定义login页面,提交请求到指定路径,然后通过Subject.login(token)完成。今天直接通过authc完成自动登录。

对于shiro作为轻量级的安全框架主要是其内部将负责的认证、鉴权都已完成,我们需要做的仅定义认证鉴权相关的逻辑关系。站在开发者的角度,shiro的整个处理过程包含以下几点:

  • 创建token,一般通过form表单提交配置authc,即FormAuthenticationFilter,创建UsernamePasswordToken
  • 由Subject.login(Token)进行登录认证,其实是有SecurityManager完成
  • 最终调用Realm对应的doGetAuthenticationInfo方法,构建SimpleAuthenticationInfo对象,此对象有两个参数principal、credentials,第一个对象在鉴权时用到,认证时shiro只会验证credentials
  • 调用Realm对应的doGetAuthorizationInfo方法,通过上一步的principal的后去对应的角色、权限信息,并封装到SimpleAuthorizationInfo即可

对与我们,若果需要扩展,比如多表登录,同表多字段登录,就可以对其中的的几个关键对象进行扩展,token、principal、SimpleAuthenticationInfo、SimpleAuthorizationInfo,具体做法下次和springmvc整合提供。

本次代码地址:https://github.com/suspring/shiro-simpler-web.git

转载于:https://my.oschina.net/suspring/blog/1852816

你可能感兴趣的:(安全验证框架shiro(三))