自动化配置,Shiro整合配置

作者: 韦德国际1946手机版  发布:2019-09-24

Shiro引入Spring

添加jar包/maven配置

<!-- shiro支持 -->

<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-core</artifactId>

<version>1.2.4</version>

</dependency>

<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-web</artifactId>

<version>1.2.4</version>

</dependency>

韦德国际1946手机版,<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-spring</artifactId>

<version>1.2.4</version>

</dependency>

<!-- 缓存 注解 -->

<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-aspectj</artifactId>

<version>1.2.4</version>

</dependency>

<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-ehcache</artifactId>

<version>1.2.4</version>

</dependency>

Spring Boot 简化了spring大量的xml配置,使用了Java Config的陈设,同期又提供了自动化配置工具。在引进新的零部件时,只须求在配置文件上加多一点点配备就能够。假如须要越来越高自定义度配置,再加多极少的Java Config文件就好了。

Jar包

韦德国际1946手机版 1

 

 

 

 

 

 

增多spring-shiro.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=""

xmlns:xsi="" xmlns:p=""

xmlns:context=""

xmlns:aop=""

xmlns:tx=""

xsi:schemaLocation="

"自动化配置,Shiro整合配置。>

<context:annotation-config />

<!-- 自定义Realm -->

<bean id="myRealm" class="shiro03.realm.MyRealm"/>

<!-- 安全管理器 -->

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

<property name="realm" ref="myRealm"/>

</bean>

<!-- 配置任何角色 -->

<bean id="anyofroles" class="shiro03.realm.AnyOfRolesAuthorizationFilter"/>

<!-- Shiro过滤器 -->

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">

<!-- Shiro的主导安全接口,这一个特性是必须的 -->

<property name="securityManager" ref="securityManager"/>

<!-- 身份验证退步,则跳转到登陆页面包车型客车安顿 -->

<property name="loginUrl" value="/index.jsp"/>

<!-- 权限认证退步,则跳转到钦定页面 -->

<property name="unauthorizedUrl" value="/unauthorized.jsp"/>

<!-- <property name="anyofroles" ref="anyofroles"/> -->

<!-- Shiro连接约束配置,即过滤链的定义 -->

<property name="filterChainDefinitions">

<value>

/login=anon

/admin*=authc

/student=anyofroles["admin,teacher"]

/teacher=roles[admin]

</value>

</property>

</bean>

<!-- 保障兑现了Shiro内部lifecycle函数的bean施行 -->

<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>

<!-- 开启Shiro注解 -->

<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"/>

<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">

<property name="securityManager" ref="securityManager"/>

</bean>

</beans>

简介

----------------------------------------------------Spring配置---------------------------------

自定义Realm类MyRealm.java

public class MyRealm extends AuthorizingRealm{

@Resource

private UserService userService;

/**

* 为当限前登入的客户授予剧中人物和权

*/

@Override

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

String userName=principals.getPrimaryPrincipal();

SimpleAuthorizationInfo authorizationInfo=new SimpleAuthorizationInfo();

authorizationInfo.setRoles(userService.getRoles);

authorizationInfo.setStringPermissions(userService.getPermissions);

return authorizationInfo;

}

/**

* 验证当前登入的客户

*/

@Override

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

String userName=token.getPrincipal();

User user=userService.getByUserName;

if(user!=null){

AuthenticationInfo authcInfo=new SimpleAuthenticationInfo(user.getUserName(),user.getPassword;

return authcInfo;

}else{

return null;

}

}

}

废话

近年项目上要更动为Spring Boot,权限是自己使用的Shiro管理的。最快的艺术是把Xml换来Java Config,可是配置也是相当多。在网络查帖子也全部都以那样做的。自己想,Shiro有Spring Boot的自动化零部件吗?打开Shiro的官方网站并不曾找到,在Shiro的github的上,开采了它的自动化零部件,有非Web意况的和Web意况的。在百度上没找到关于shiro-starter的施用,就想着写写博客讲一下。

applicationContext-dao.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

    <!-- 0.连接池属性设置读取指定的properties文件 -->
    <context:property-placeholder location="classpath:db.properties" />    

    <!-- 1.将连接池放入spring容器 -->
    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="driverClass" value="${jdbc.driver}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>



    <!--2. 配置 Mybatis的会话工厂 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 数据源 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 配置Mybatis的核心 配置文件所在位置 -->
        <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" />
    </bean>



    <!-- 3.1  mapper代理配置方法一   这种方法需要大量重复的配置代理对象
    MapperFactoryBean:根绝mapper接口生成代理对象

    <bean id="selectUser" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="cn.qlq.core.dao.SelectUser"></property>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
    </bean>
     -->




     <!-- 3.2通过MapperScannerConfigurer扫描进行批量生成代理对象 
         遵循规范:mapper.java和mapper.xml名字一样且在同一个目录下
        自动扫描出来的代理对象的id为mapper类类名(首字母小写)     
     -->
     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
         <!-- 指定扫描的包名,如果有多个,用半角逗号分隔 -->
         <property name="basePackage" value="cn.qlq.mapper"></property>
         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
     </bean>


    <!-- 4.配置事务管理器 -->
    <!-- 事务核心管理器,封装了事务操作,依赖于连接池 -->
    <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 5.开启注解管理aop事务 -->
    <tx:annotation-driven/>



    <!-- 事务模板对象,依赖于事务核心管理器 -->
    <bean name="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
        <property name="transactionManager" ref="transactionManager"></property>
    </bean>    

    <!-- ················开始使用XML管理事务························  --> 
    <!--  配置事务通知(无论哪种方式都要用到事务的核心管理器)-->
    <tx:advice transaction-manager="transactionManager" id="firstTx">
        <tx:attributes>
            <!--以方法为单位,指定方法应用事务什么属性
             isolation:隔离级别
             read-only:只读属性
             propagation:传播行为
             -->
             <!-- 企业中运用通配符命名规则。两套增删改查(8种) -->
            <tx:method name="save*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>
            <tx:method name="persist*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>
            <tx:method name="delete*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>
            <tx:method name="remove*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>
            <tx:method name="update*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>
            <tx:method name="modify*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>
            <tx:method name="get*" isolation="DEFAULT" read-only="true" propagation="REQUIRED"/>
            <tx:method name="find*" isolation="DEFAULT" read-only="true" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

    <!-- 配置织入 -->
    <aop:config>
        <!-- 配置切点表达式 -->
        <aop:pointcut expression="execution(* cn.qlq.Service.*ServiceImpl.*(..))" id="texPc"/>
        <!-- 配置切面:切点 通知
        advice-ref:通知名称
        pointcut-ref:切点名称
         -->
        <aop:advisor advice-ref="firstTx" pointcut-ref="texPc"/>
    </aop:config>
</beans>

自定义脚色过滤器AnyOfRolesAuthorizationFilter.java

当贰个剧中人物有两个功用模块页面包车型地铁权能时,会产出权力失效难点,不可能布置,供给和煦定义剧中人物过滤器。

public class AnyOfRolesAuthorizationFilter extends RolesAuthorizationFilter{

@Override

public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue)

throws IOException {

Subject subject = getSubject(request, response);

String[] rolesArray = mappedValue;

if (rolesArray == null || rolesArray.length == 0) {

return true;

}

for (String roleName : rolesArray) {

if (subject.hasRole) {

return true;

}

}

return false;

}

}

Shiro的Spring Boot 组件

韦德国际1946手机版 2

荧屏快速照相 2017-08-28 21.49.32.png

看了源码,shiro-spring-boot-web-starter正视了shiro-spring-boot-starter,本身就说说shiro-spring-boot-web-starter的施用。

在resources/META-INF/additional-spring-configuration-metadata.json文件中,描述了Shiro提供的布局项。

{
  "groups": [
    {
      "name": "shiro"
    },
  ],
  "properties": [

    {
      "name": "shiro.web.enabled",
      "type": "java.lang.Boolean",
      "description": "shiro 自动化组件开关,默认值是打开",
      "defaultValue": true
    },
    {
      "name": "shiro.loginUrl",
      "type": "java.lang.String",
      "description": "配置shiro的认证(登录)Url",
      "defaultValue": "/login.jsp"
    },
    {
      "name": "shiro.successUrl",
      "type": "java.lang.String",
      "description": "配置shiro的认证(登录)成功后跳转的Url",
      "defaultValue": "/"
    },
    {
      "name": "shiro.unauthorizedUrl",
      "type": "java.lang.String",
      "description": "配置shiro的未授权跳转的Url,http状态码403",
      "defaultValue": null
    },
    {
      "name": "shiro.sessionManager.sessionIdCookieEnabled",
      "type": "java.lang.String",
      "description": "是否使用cookie存储session的id",
      "defaultValue": true
    },
    {
      "name": "shiro.sessionManager.sessionIdUrlRewritingEnabled",
      "type": "java.lang.String",
      "description": "通过URL参数启用或禁用会话跟踪。 如果您的网站需要Cookie,建议您禁用此功能。",
      "defaultValue": true
    }
  ]
}

配置项描述文件,在

韦德国际1946手机版 3

荧屏快速照相 2017-08-28 22.39.57.png

其一包里也有一对布局。

 applicationContext-action.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

    <!-- 与struts2整合的配置 -->
    <context:component-scan base-package="cn.qlq.Action"></context:component-scan>



</beans>

 

 

整套配置

自己将装有的布置整理列出来

shiro: 
  web: 
    ## 开启shiro web自动化配置,默认开启
    enabled: true
  loginUrl: /login.jsp
  successUrl: /
  ## 必须要配置为授权的url,否则在无权限的情况下,会找不到未授权url,导致找不到安全管理器(SecurityManager)
  unauthorizedUrl: null
  ## session管理方式,true使用shiro提供的session管理,false则使用servlet提供的session管理
  userNativeSessionManager: false
  ## 会话管理
  sessionManager: 
    sessionIdCookieEnabled: true
    sessionIdUrlRewritingEnabled: true
    deleteInvalidSessions: true
    cookie: 
      name: JSESSIONID
      maxAge: -1
      domain: null
      path: null
      secure: false
  ## 记住我管理
  rememberMeManager: 
    cookie: 
      name: rememberMe
      ## 默认一年
      maxAge: 60 * 60 * 24 * 365
      domain: null
      path: null
      secure: false

applicationContext-service.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

    <!--4.注解扫描service  -->
    <!-- 4.开启组件自动扫描,也就是启用注解。前提是导入spring-context-3.2.xsd约束和引入新的命名空间,注解扫描service出错了 -->

        <context:component-scan base-package="cn.qlq.service"></context:component-scan> 



</beans>

 

 

使用

上边就讲讲怎么采纳

----------------------------------------Mybatis配置----------------------------------------------------

本文由韦德国际1946发布于韦德国际1946手机版,转载请注明出处:自动化配置,Shiro整合配置

关键词: JAVA Spring Shiro SpringB... 框架整合

上一篇:缓冲区溢出攻击
下一篇:没有了