オープンソースフォーラムjforumの統合

4824 ワード

Jforumはオープンソースjavaクラスのフォーラムで、コンパクトで効率的で、多くのJSPの新技術を運用し、hsqldb、oracle、mysql、postgresqlデータベースをサポートし、MVC設計モデルに完全に従っている.
1.まず最新バージョンをダウンロードします(詳細は、プロジェクトのホームページ:www.jforum.netを参照).
2.必要に応じて選択できる複数のデータベースをサポートするデータベースを作成します.
3.jforum.warはtomcatディレクトリにコピーし、tomcatを起動します.
4.ブラウザを開き、http://127.0.0.1:8080/jforum/install.jsp自動インストールを行い、指示に従って記入します.
5.インストールが完了したら、フォーラムに参加しないでください.中国語をサポートするためにいくつかのプロファイルを変更します.(上のインストール手順も設定されていますが、主に中国語の文字化けしの問題に対応しています)
(1)jforum/WEB-INF/config/SystemGlobalsを開く.propertiesはdefault.container.encoding=ISO-8859-1、修正:default.container.encoding = UTF-8
(2)jforum/WEB-INF/config/jforum-customを開く.confはdatabaseに位置決めする.connection.string 1項、末尾に&useUnicode=true&characterEncoding=utf 8を追加
6.tomcatを再起動し、http://127.0.0.1:8080/jforum/forums/list.page
adminとしてログインし、バックグラウンドにフォーラムを設定できます.
7.フォーラムと自分の既存のプロジェクトの統合(自分の必要に応じて、私のところは自分の既存のプロジェクトの既存のユーザー管理で、何度もログインしたくないので、ここではjforumが提供するSSO技術を使用します)
(1)修正.jforumソース、net.を実現jforum.ssoインタフェース
public class CookieUserSSO implements SSO {

static final Logger logger = Logger.getLogger(CookieUserSSO.class.getName());

public String authenticateUser(RequestContext request) {

// login cookie set by my web LOGIN application 

Cookie cookieNameUser = ControllerUtils.getCookie(SystemGlobals

.getValue(ConfigKeys.COOKIE_NAME_USER));

String username = null;

if (cookieNameUser != null) {

username = cookieNameUser.getValue();

}

logger.info("cookie username="+username);

System.out.println("cookie username="+username);

return username; // return username for jforum

// jforum will use this name to regist database or set in HttpSession 

}

public boolean isSessionValid(UserSession userSession,

RequestContext request) {

Cookie cookieNameUser = ControllerUtils.getCookie(SystemGlobals

.getValue(ConfigKeys.COOKIE_NAME_USER)); // user cookie 

String remoteUser = null;

if (cookieNameUser != null) {

remoteUser = cookieNameUser.getValue(); // jforum username 

}

if (remoteUser == null

&& userSession.getUserId() != SystemGlobals

.getIntValue(ConfigKeys.ANONYMOUS_USER_ID)) {

// user has since logged out 

return false;

} else if (remoteUser != null

&& userSession.getUserId() == SystemGlobals

.getIntValue(ConfigKeys.ANONYMOUS_USER_ID)) {

// anonymous user has logged in 

return false;

} else if (remoteUser != null

&& !remoteUser.equals(userSession.getUsername())) {

// not the same user (cookie and session) 

return false;

}

return true; // myapp user and forum user the same. valid user. 

}

} 

コンパイルされたclassファイルはjforumWEB-INFclassesetjforumssoの下に保存されます
 
(2)SystemGlobalsを修正する.propertiesでの構成:SystemGlobalsを変更する.propertiesファイルのプロパティの内容:authentication.type = sso sso.implementation = net.jforum.sso.CookieUserSSO sso.redirect = http://www.123.com/login.jsp//実際のログインページアドレスに基づいてcookieを変更することができる.name.user=123 UserInfo//自分のプロジェクトに保存されているクッキー名は、実際の状況に応じて(3)Webアプリケーションのログインとログアウト部分の論理を変更できます:ログイン部分には以下のコードが追加されます:...Cookie cookie = new Cookie("springTourUserInfo", sname); cookie.setMaxAge(-1); cookie.setPath("/");//クッキーは同じアプリケーションサーバでのみ有効です.addCookie(cookie); ... ログアウトセクションには、次のコードが追加されます.Cookie cookie = new Cookie("springTourUserInfo", ""); cookie.setMaxAge(0);//delete the cookie.  cookie.setPath("/"); response.addCookie(cookie); ......(4)自分のプロジェクトにフォーラムのリンクを追加:フォーラム
これでOKです
関連知識を併記する
SSOを実現する技術は主に以下の点に注意しなければならない:(1)cookiesに基づいて実現するには、2つのドメイン名間でsessionidを伝達する方法がwindowsで成立する可能性がある場合、unix&linuxで問題が発生する可能性がある.データベースに基づいて実装できます.セキュリティの面では、より多くの考慮を払う可能性があります.また,ドメイン間問題については,cookies自体はドメイン間ではないが,ドメイン間SSOを実現するために利用できる.(2)Broker-based(マネージャーベース)、例えばKerberosなど;この技術の特徴は,認証とユーザアカウント管理を集中したサーバがあることである.マネージャーは、さらなる要求に使用される電子のアイデンティティにアクセスする.中央データベースの使用により、管理のコストが削減され、認証に共通および独立したサードパーティが提供されます.例えばKerberos,Sesame,IBM KryptoKnight(証明書ベース思想)などである.Kerberosはマサチューセッツ工科大学が発明したセキュリティ認証サービスで、現在のバージョンV 5は、UNIXとWindowsによってデフォルトのセキュリティ認証サービスとしてオペレーティングシステムに統合されている.(3)エージェントベースのAgent-based(エージェントベース)このソリューションには,異なるアプリケーションに対して自動的にユーザアイデンティティを認証するエージェントがある.このエージェントは異なる機能を設計する必要があります.例えば、パスワードテーブルまたは暗号化鍵を使用して、認証の負担をユーザから自動的に削除することができる.エージェントは、サーバの認証システムとクライアント認証方法との間で「翻訳」として機能するサーバの上に置かれる.例えばSSHなど.(4)Token-based,例えばSecurID,WebID,現在広く使用されているパスワード認証,例えばFTP,メールサーバのログイン認証,これは簡単で使いやすい方式であり,1つのパスワードが複数のアプリケーションで使用されることを実現する.(5)ゲートウェイエージェントand Broker-basedに基づいて、ここでは説明しない.(6)セキュリティ断言タグ言語(SAML)に基づいて実現され,SAML(Security Assertion Markup Language,セキュリティ断言タグ言語)の出現はSSOを大幅に簡略化し,OASISによってSSOの実行基準として承認された.オープンソース組織OpenSAMLはSAML規範を実現し、参考できるhttp://www.opensaml.org/CASはエール大学が開発した単点登録システム(SSO,single sign-on)で、応用が広く、プラットフォームとは独立した、理解しやすく、エージェント機能をサポートしている.