优化AppFuse 1.9.3 SpringMVC IBatis:去除Bug

   

   我在使用 AppFuse_1.9.3_SpringMVC_IBatis 时发现了一些Bug,现在我把这些bug给出来,并提供个人的解决办法。不过,有的BUG我在处理时只记录了解决办法,却没有记录问题,不好意思……

   
Bug1: 不记得了……

   解决办法:UserDaoiBatis.java文件中有句话

       List userRoles = getSqlMapClientTemplate().queryForList("getUserRoles", user.getUsername());

       其中的getUsername()应改为 getId()

      或者直接去掉这句话,因为它没有任何作用

   
Bug2:在后台为某用户分配多个角色,结果该用户只获得了所选角色中的第一个

    解决办法:在UserDaoiBatis.java文件中找到

       if (userRoles.isEmpty()) {

                     getSqlMapClientTemplate().update("addUserRole", newRole);

                 }

       然后去掉这个 if条件

  
Bug3:admin menu按权限显示时出莫名奇妙的问题

    解决办法:将struts-menu版本升级到 2.4.3,并将cssHorizontalMenu.vm 和 cssVerticalMenu.vm替换为 appFuse2.0中的版本。

 

  
Bug4:不记得了……  

     解决办法:UserFormController中的 

           return new ModelAndView(new RedirectView("mainMenu.html"));

     应改成 return new ModelAndView(new RedirectView("/mainMenu.html"));

    同样,这个bean定义的 cancelView也要做相同的相改

 

  

  
Bug5: 出现org.acegisecurity.BadCredentialsException异常

     解决办法:去掉UserSecurityAdvice中的两句话:  

  auth = new UsernamePasswordAuthenticationToken(user, user

        .getPassword(), user.getAuthorities());

    SecurityContextHolder.getContext().setAuthentication(auth);  

     因为这里的user.getPassword()拿到的是密文,但acegi要的是明文,结果导致BadCredentialsException异常。

    那么去掉了这两句话,会不会对系统有什么影响?影响就是少掉了一个鸡肋的功能:若用户修改了自己的记录,则应更新自己的authentication。这个功能相当鸡肋,因为它只能应对 “用户修改自己资料”的情况,若用户修改了他人资料,它就不起作用。那么,有没有更好的替代方案?有的,就是 配置 filterInvocationInterceptor 的 alwaysReauthenticate属性为true。这样的话,不管修改了自己的资料还是他人的资料,都能保证authentication与User一致

 

   
Bug6:  修改了资源文件后仍然出现中文乱码

     解决办法:对每个jsp,如果其中没有指定 pageEncoding,都要在jsp的最上方加上一行:<%@ page pageEncoding="UTF-8" %>,否则,tomcat不会把页面当作utf-8来编译,结果就是乱码

 

   
Bug7:UserCounterListener.attributeAdded()方法中出现java.lang.ClassCastException异常

    解决办法:仿照 attributeRemoved()方法修改attributeAdded()方法

   
Bug8:修改用户角色后,该用户须重新登录才能更新权限

    解决办法:在Spring配置文件中,把filterInvocationInterceptor 的 alwaysReauthenticate属性为true,以保证用户角色被更新后,它拥有的权限会在下一次操作时更新

  
Bug9:不记得了……

    解决办法:将acegi的jar包从1.0.1换成了1.0.7

   
Bug10:某个功能的冗余设计

   解决办法:应去掉adminInterceptor的bean定义,清扫该bean使用的场合,因为这个拦截跟 基于角色的控制机制 在功能上重复了。

Leave a Reply

Your email address will not be published. Required fields are marked *