S(spring)S(shiro)M(mybatis)整合

一:建立业务层模块
1:建立业务层模块:进行业务层的实现。父POM,子POM做好依赖包。建立VO,DAO,IService,ServiceImpl。
2:建立mapping.Xxx.xml,在resources目录下建立mybatis建立mybatis.cfg.xml,配置VO的别名,以简化映射文件的类型。在profile/dev/config下创建database.properties配置文件连接数据库。
二:建立WEB模块
1:建立WEB模块。追加依赖包。
2:创建 spring-mybatis.xml配置文件,实现spring和mybatis的整合。主要配置数据源,数据库,资源匹配符等。
3:创建spring-common文件,设置扫描base-package,启用数据库事务配置。定义事务切入点,导入spring-mybatis文件
4:进行业务测试,把业务层跑通。
5:新建spring-mvc.xml设置扫描范围,声明Annotation注解,启用serlevt。修改web.xml文件,追加springmvc的相关配置。主要是启动spring容器,编写全局属性,配置监听编码过滤器等。配置SpringMVC所需要的servlet程序类。将shiro与spring整合,设置过滤器表示所有的shiro控制将转发给spring完成。
6:新建XxxRealm类。进行认证和权限的验证。
7:新建spring-shiro.xml文件,设置程序的各种路径配置。并将此配置文件引入到spring-common中.
8:将所有要使用的页面导入到项目中。记住:如果导入到web-inf目录下,要在spring-mvc中追加访问路径的信息配置,增加前缀/WEB-INF/pages/ 和 后缀:.jsp。如果是js,css等静态文件就需要在spring-mvc中做映射访问了。
例如:<mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>
最后在 web.xml中的servlet映射路径中增加 <url-pattern>/</url-pattern>
三:使用内置登陆控制
对于登陆控制几乎是雷同的:取得Subject对象,使用Subject对象验证用户名和密码。所以shiro考虑到此类的处理重复。所以针对登陆的控制给出了新的解决方法,利用配置文件实现登陆。另外:在进行登陆控制的时候并不是只有用户名和密码,还有密码加密处理,验证码检测, remeberMe等功能。
1:增加一个标准做法:建立一个登陆Action路径。这个action不负责任何的具体处理,知识为了放到到JSP页面。
2:如果要想使用内置登陆,就需要编写一个过滤器。主要功能是配置authc的信息项。包括用户名密码的属性等,还有执行路径的内容等。
3:内置登陆过滤器完成之后还要与shiro的过滤器进行整合处理。
4:修改登陆页的请求路径为:xx.action
四:控制层的注解认证与授权检测
1:如果要想对控制层的注解进行操作的配置处理,需要修改spring-shiro配置文件,采用AOP的模式进行配置。
【spring-common.xml】需要配置一个声明周期的拦截控制类:org.apache.shiro.spring.LifecycleBeanPostProcessor
【spring-mvc.xml】启用AOP的代理配置:org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator
【spring-mvc.xml】在安全管理器上进行切面控制:org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor
2:如果要想进行检测基本上有以下几种注解:
是否登陆(认证)过:@RequiresAuthentication;
是否具备有指定的角色:@RequiresRoles;
是否具备有指定的权限:@RequiresPermissions
五:业务层的注解认证与授权检测
1:和控制层注解认证相似,在业务层接口方法中定义。
例如:
public interface IEmpService {
@RequiresAuthentication
public void add() ;
@RequiresRoles("dept")
public void edit() ;
@RequiresPermissions("news:add")
public void delete() ;
}
2:【spring-common.xml】中配置文件,进行AOP切面控制:类似于控制层的配置。
六:登陆注销
之前已经实现了用户的登陆以及各种检测,但是任何的系统一定要有注销操作。既然我们使用的是内置的登录处理器,那么对于注销的操作同样使用内置的登陆处理器完成,直接覆写一个注销过滤器的操作即可。
1:修改spring-shiro.xml配置文件,定义内置注销过滤器:org.apache.shiro.spring.web.ShiroFilterFactoryBean
七:缓存配置
在之前的过程中已经发现,shiro针对于角色和权限的控制每一次都要查询数据库。性能很低。shiro针对此问题提供有一个缓存的配置机制。
1:修改pom文件,增加shiro-ehcache配置。
2:如果要使用ehcache组件,那么必须要有一个配置文件。这个配置文件是固定的,直接拷贝到resources/shiro目录下即可。
3:修改spring-shiro.xml,进行缓存管理器的配置。属性信息是刚才的ehcache文件:org.apache.shiro.cache.ehcache.EhCacheManager
4:随后在安全管理器之中追加缓存操作。<property name="cacheManager" ref="cacheManager"/>
限制:ehcache只是作为单实例WEB开发中使用的缓存组件,如果真要进行服务器的集群配置,ehcache无效。
八:会话(SESSION)管理
shiro有一套自己seesion处理机制。并且shiro中Session与HttpSession联系紧密
1:如果要想在shiro中处理Session,首先应该配置两个组件包:shiro-quartz(因为seesion有清除时间,所有需要有定时器支持)。commons-collections(session的对象有很多,需要对数据有一个集合管理)
2:修改spring-shiro.xml,首先处理SeesionID的问题。可以使用uuid。
3:设置好Session在服务器端的储存,以及客户端要使用的SessionID策略:配置session管理之中使用的缓存策略,定义session管理器所使用的SessionID生成策略。
4:如果要进行session的处理,一定要在客户端进行cookie的数据保存,所以此时需要建立一个Cookie的操作模板。
5:定义session管理器,已进行全局的session管理操作。
6:session在用户离开之后需要立即清除所占用的资源,为了方便用户不在的检测,还需要建立一个会话调度控制器。设置session失效的扫描时间等。
7:修改全局安全管理器,添加session管理器。
<property name="sessionManager" ref="sessionManager"/>
九:RememberMe
1:所有的记住我的功能都是在客户端浏览器中保存有Session的处理数据而实现。
2:建立一个RememberMe的安全管理器。表明要使用的Cookie配置。
3:修改安全管理器,追加remeberMe的验证处理。
4:此时使用的是内置管理器,所以要在内置登录管理器中追加 需要支持rememeberMe的参数。
5:在jsp登录页面追加“记住我”复选框。
6:修改过滤规则,如果某些路径允许remeberMe的状态访问,就用user,必须登录就用authc。
十:密码加密处理
1:实际工作中密码绝对不可能以明文的形式出现。我们往往使用MD5加密,为了安全又使用了种子数以及多次循环进行加密。所以在java.util中添加MD5Code和passwordUtil两个类进行密码加密处理。
2:修改自定义Realm程序类。修改程序结构。将密码进行PasswordUtil的处理。
3:定义一个认证信息的匹配类。
4:在spring-shiro.xml配置文件中,追加认证处理类。
十一:验证码检测
1:在根目录导入验证码组件,在登录页面.jsp中追加验证码的显示输入。
2:在内置登录管理中我们使用了org.apache.shiro.web.filter.authc.FormAuthenticationFilter完成。但是如果要进行密码验证,则需要一个类去继承此类,也就是要重新进行规则的梳理。
3:定义DefaultCredentialsMatcher类,进行用户输入密码和验证码组件生成密码的比较。
4:在spring-shiro.xml中,追加验证码过滤处理类。并将内置登录过滤器更改为刚才自定义的登陆过滤处理器。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值