如何去掉roller的認證模塊acegi

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進行二次開發有各種各樣的技巧、方法、思路,有的請分享一下!

發佈了35 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章