基于SSH2框架Struts2拦截器的登录验证实现

    通过之前的 Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解系列文章,我们已经成功将这三种框架整合到了一起, 这次大象将在此基础上用一个小实例来说明,怎么利用 Struts2 的拦截器特性实现登录验证,以及超时后的跳转问题。
    大象在这里假设你已经弄清楚了Struts2拦截器的基本概念,可以进入实际运用了。那么我们在之前的基础上只需要做下小小的改变,就可以使用Struts2的拦截器机制实现登录的验证。
    修改数据库
    user表中增加password字段,将初始密码都设为123,因为是示例所以采用明码,实际开发中,当然不能这样做,需要进行加密处理。再将name改为username,其实name字段可以不用改名,我这样做是为了命名规范,请注意,如果字段改为usernameUser类中的对应属性也要进行相应变化(如果你加注释写法可以不用改),还有TestTestHibernateDao中的getName()都要改为getUsername()
    修改index.jsp
    hello.action改为login!welcome.action
    增加登录类
    web包下创建LoginAction类,在其中添加welcomelogin方法,前者为index.jsp的跳转方法,它将转向到login.jsp页面。而后者则用来处理登录事件,如果成功将进入到主页面,失败则返回到登录页面。最后面有源码下载,这里省略。
    增加拦截器
    要实现登录拦截的功能,最关键的就是要实现拦截类了,在common包下面再增加一个interceptor包,创建AuthorityInterceptor类,并继承MethodFilterInterceptor,为什么继承它呢?因为它是对方法进行拦截,而在这个应用中,我们是对绝大部分的方法进行拦截,而对个别例外的方法排除。
  基于SSH2框架Struts2拦截器的登录验证实现 - 大海 - 大海的博客
   session中取得当前登录用户,如果存在,就继续执行后面的拦截器;否则,就跳转到登录页面。所以这样实现了代码后,还要在struts.xml中进行相应的设置。
    增加拦截器配置
基于SSH2框架Struts2拦截器的登录验证实现 - 大海 - 大海的博客
做好这一步之后,那么登录验证拦截器将会对除了welcomelogin之外的所有方法进行拦截了。另外我想说下,拦截器的实现还有一种注解的方式,它不需要实现拦截器类,只需要指定一个注解类型和一个拦截方法就可以了,具体的请自己去查相关资料。这里我没采取注解方式是因为它只能应用到方法级别,不能进行代码复用,如果有多个Action都需要执行拦截操作,那么就得把同样的注解方法复制到不同的Action中,这无疑是很糟糕的。而使用拦截器类就简单多了,只需要在配置文件中指定它,并引用它,就可以在任意的Action中生效,也没有侵入式代码,这就是常说的AOP切面,struts2的拦截器就是AOP的一个具体实现。
    增加全局转向配置
基于SSH2框架Struts2拦截器的登录验证实现 - 大海 - 大海的博客
还记得拦截器里面的return Action.LOGIN 这句吧,当程序执行完这一行后,就会到struts.xml文件中去找namelogin全局转向配置,因此这里我设置为一个jsp页面,而没有定义成/login!welcome.action就是因为如果按这样做了,那么转向后,登录页面将显示在iframe框架中,这肯定不是我们希望看到的。解决这个问题,网上有很多方法,我查了一下,再结合实际,其实没那么复杂,一句话就可以搞定。如果使用frameset这种做法也有效,大象同样测试过,只不过例子中的代码没有这样写而已。
    增加jump.jsp
基于SSH2框架Struts2拦截器的登录验证实现 - 大海 - 大海的博客
增加login.jsp
    登录页面,输入用户名与密码,因为是例子,所以我没加验证码,在正式开发中应该加上。
基于SSH2框架Struts2拦截器的登录验证实现 - 大海 - 大海的博客
增加login-index.jsp
    这是登录成功后转向的页面,在这里,我用iframe框架来显示内容。
基于SSH2框架Struts2拦截器的登录验证实现 - 大海 - 大海的博客
到这里,所有工作都已经完成,已经可以登录登出了,并且拦截器也可以正常工作,超时登出也没问题。

猜你喜欢

转载自blog.csdn.net/leonaya/article/details/6910535