浏览 1427 次
锁定老帖子 主题:如何去掉roller的认证模块acegi
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-22
roller使用acegi做为其认证模块,acegi是比较成功的一个安全与认证模块,相信很多项目中都有使用到。但是有些项目有自己的认证模块又想集成roller做二次开发,这时可能acegi是必须砍掉的。
下面说说如何简单去掉acegi,呵呵,不是很彻底!
通过搜索roller源代码,发现好几个类引用到acegi的东西,导致roller跟acegi耦合太强!roller启动时RollerContext必须被加载,这个类继承spring的ContextLoaderListener,所以roller启动的时候会去加载spring的配置文件。不想说那么多了,先说怎么做吧。
1、在RollerContext类中注释掉 initializeSecurityFeatures(servletContext);
2、写一个Filter实现类,增加登陆逻辑处理。 public class AgFilter implements Filter{ private static Log log = LogFactory.getLog(AgFilter.class); public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { RollerSession rs = RollerSession .getRollerSession((HttpServletRequest) req); HttpServletRequest hs = (HttpServletRequest) req; //认证逻辑处理 if (hs.getServletPath().indexOf("roller_j_security_check") > -1) { String userName = req.getParameter("j_username"); try { UserManager umgr = WebloggerFactory.getWeblogger() .getUserManager(); User user = umgr.getUserByUserName(userName); rs.setAuthenticatedUser(user); req.getRequestDispatcher("/roller-ui/login-redirect.jsp").forward(req, res); return ; } catch (WebloggerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } chain.doFilter(req, res); } public void destroy() { } public void init(FilterConfig arg0) throws ServletException { } }
3、修改web.xml去掉acegi的filter <filter> <filter-name>securityFilter</filter-name> <filter-class>org.apache.roller.weblogger.ui.core.filters.AgFilter</filter-class> <!-- <init-param>--> <!-- <param-name>targetClass</param-name>--> <!-- <param-value>org.acegisecurity.util.FilterChainProxy</param-value>--> <!-- </init-param>--> </filter>
基本上这样就可以了。虽然roller启动时会加载一些acegi的东西,但我们没有用到也就无所谓了。这样是最简单的也是不彻底的。
相信利用roller进行二次开发有各种各样的技巧、方法、思路,有的请分享一下! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |