shiro+spring+mybatis
web.
Under the WEB-INFO
1、欢迎页,设置web启动时的首页
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index1.jsp</welcome-file>
</welcome-file-list>
2、错误页设置
<error-page>
<error-code>404</error-code>
<location>/error</location>
</error-page>
3、过滤器设置
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.spring work.web.filter.DelegatingFilterProxy</filter-class>
<init-param> 初始化参数
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern> filter拦截的URL
</filter-mapping>
4、还可以设置Session、Listener、Servlet、初始化参数等
5、在本项目中,spring没有在 配置,直接在Java代码中配置,web. 看起来很简洁,只有filter、welcomePage&ErrorPage
spring-pz-shiro.
1、 ns命名空间等
2、配置dataSource
<bean id=\"dataSource\"
class=\"org.spring work.jdbc.datasource.DriverManagerDataSource\">
<property name=\"driverClassName\" value=\"com.mysql.jdbc.Driver\" />
<property name=\"url\" value=\"jdbc:mysql://127.0.0.1:3306/ityks\" />
<property name=\"username\" value=\"root\" />
<property name=\"password\" value=\"root\" />
</bean>
3、在spring整合shiro的项目中加上,其作用是管理和整合shiro bean
<bean id=\"lifecycleBeanPostProcessor\" class=\"org.apache.shiro.spring.LifecycleBeanPostProcessor\"></bean>
4、我们使用MD5加密密码,所以需要配置一个密码管理的类,配置一个密码匹配对象
<bean id=\"credentialsMatcher\" class=\"org.apache.shiro.authc.credential.Md5CredentialsMatcher\"></bean>
5、缓存管理
<bean id=\"cacheManager\" class=\"org.apache.shiro.cache.MemoryConstrainedCacheManager\"></bean>
6、使用shiro自带的Realm
<bean id=\"jdbcRealm\" class=\"org.apache.shiro.realm.jdbc.JdbcRealm\">
<property name=\"credentialsMatcher\" ref=\"credentialsMatcher\"></property> 密码匹配规则
<property name=\"permissionsLookupEnabled\" value=\"true\"></property>TURE就允许使用,通过角色查所有权限
<property name=\"dataSource\" ref=\"dataSource\"></property> 数据源
<property name=\"authenticationQuery\"用户登录,登录用户名作为条件,查询密码字段,验证登录
value=\"SELECT password FROM sys_login WHERE username = ?\"></property>
<property name=\"userRolesQuery\" 用户名查角色
value=\"SELECT role_name from sys_login_role slr left join sys_role using(role_id) left join sys_login using(login_id) WHERE slr.username = ?\"></property>
<property name=\"permissionsQuery\" 遍历角色查所有权限
value=\"SELECT permission_name FROM sys_role_permission srp left join sys_role using(role_id) left join sys_permission using(permission_id) WHERE srp.role_name = ?\"></property>
</bean>
---------------------------------------------------------分割------------------------------------------------------------
关于密码的规则配置
<bean id=\"hashedCredentialsMatcher\"
class=\"org.apache.shiro.authc.credential.HashedCredentialsMatcher\">
<property name=\"hashAlgorithmName\" value=\"MD5\" />使用哪种加密方式
<property name=\"storedCredentialsHexEncoded\" value=\"true\" />编码方式,Hex还是 64
<property name=\"hashIterations\" value=\"1\" />密码加密递归次数
</bean>
7、 shiro的核心安全管理器securityManager
<bean id=\"securityManager\" class=\"org.apache.shiro.web.mgt.DefaultWebSecurityManager\">
<property name=\"realm\" ref=\"jdbcRealm\"></property>
<property name=\"cacheManager\" ref=\"cacheManager\"></property>
</bean>
8、shiro的过滤器
<bean id=\"shiroFilter\" class=\"org.apache.shiro.spring.web.ShiroFilterFactoryBean\">
<property name=\"securityManager\" ref=\"securityManager\"></property> 核心对象
<property name=\"loginUrl\" value=\"/login.jsp\"></property> 要求登录时的链接(登录页面地址),非必须的属性,默认会自动寻找Web工程根目录下的\"/login.jsp\"页面
<property name=\"successUrl\" value=\"/index\" ></property> 登录成功后要跳转的连接
<property name=\"unauthorizedUrl\" value=\"/\"></property> 用户访问未对其授权的资源时,所显示的连接
<property name=\"filterChainDefinitions\"> 制订过滤规则,从上到下,从左往右
<value>
<!-- /index=authc
/question=roles[\"admin\"]
/question/**=roles[\"admin\"] -->
</value>
</property>
</bean>
spring-transaction.
1、 把.propertites文件中的动态value写到 里面,例子中\"location\"的值就是jdbc.properties的值
<bean id=\"propertyConfigurer\"
class=\"org.spring work.beans.factory.config.PropertyPlaceholderConfigurer\">
<property name=\"location\" value=\"classpath:jdbc.properties\" />
</bean>
2、spring管理属性文件:PropertiesFactoryBean和PropertyPlaceholderConfigurer的区别
PropertyPlaceholderConfigurer & PropertiesFactoryBean几乎是一样的,官方推荐用PropertyPlaceholderConfigurer
不用太纠结这个,都是读.properties
3、连接池
现在大部分都用的阿里的druid连接池4、
<bean id=\"dataSourceDDS\" class=\"com.alibaba.druid.pool.DruidDataSource\"
destroy-method=\"close\">
<property name=\"driverClassName\" value=\"${driver}\" />
<property name=\"url\" value=\"${url}\" />
<property name=\"username\" value=\"${username}\" />
<property name=\"password\" value=\"${password}\" />
<!-- 初始化连接大小 -->
<property name=\"initialSize\" value=\"${initialSize}\"></property>
<!-- 连接池最大数量 -->
<property name=\"maxActive\" value=\"${maxActive}\"></property>
<!-- 连接池最大空闲 -->
<property name=\"maxIdle\" value=\"${maxIdle}\"></property>
<!-- 连接池最小空闲 -->
<property name=\"minIdle\" value=\"${minIdle}\"></property>
<!-- 获取连接最大等待时间 -->
<property name=\"maxWait\" value=\"${maxWait}\"></property>
</bean>
4、 myBatis的配置
<bean id=\"sqlSessionFactory\" class=\"org.mybatis.spring.SqlSessionFactoryBean\">
<property name=\"dataSource\" ref=\"dataSourceDDS\" />该属性必须配置,多数据源时会有多个dataSource,同时也需要配置多个sqlSessionFactory来对应
<property name=\"mapperLocations\">mapperLocations & configLocation 都是用来给mybatis工厂配置
<list>
<value>classpath:com/mrkj/ygl/config/mapping/*. </value>
</list>
</property>
</bean>
在本项目中,myBatis的map映射里面写了很多sql语句,这里是spring通过myBatis操控数据库的主战场
5、用自动扫DAO的类,自动装配,然后被spring控制
<bean class=\"org.mybatis.spring.mapper.MapperScannerConfigurer\">
<property name=\" Package\" value=\"com.mrkj.ygl.dao\" /> Package 属性是让你为映射器接口文件设置基本的包路径
<property name=\"sqlSessionFactoryBeanName\" value=\"sqlSessionFactory\"></property>在多个数据源的情况下,设置属性名来区分装配的类
</bean>
6、 事务管理,访问数据库需要
<bean id=\"transactionManager\"
class=\"org.spring work.jdbc.datasource.DataSourceTransactionManager\">
<property name=\"dataSource\" ref=\"dataSourceDDS\" />
</bean>
暂时待定
继续阅读与本文标签相同的文章
区块链开发教程汇总分享推荐
什么是“爬虫”技术?导致你买不到特价机票的原因
-
升级iOS 13后真能随意换字体?库克言:想多了,字体管理≠换字体
2026-05-19栏目: 教程
-
Java发送邮件必带超时时间配置
2026-05-19栏目: 教程
-
学术研究显示:移动支付让人花钱更多,是真的吗?
2026-05-19栏目: 教程
-
腾讯营收5.99亿美元登顶9月全球移动发行商收入总榜 同比增30%
2026-05-19栏目: 教程
-
黄顺昌:如何到达行业专家水平
2026-05-19栏目: 教程
