ソフトウェア開発会社で働く社員のアメブロ -3ページ目

ログインブロック機能を追加実装してみる

仕事上、イントラマート(v6.1)という製品を利用したシステムを開発しています。
スクリプト開発モデルです。



お客様から
「一時的にログインを抑止したい」
という要望がありました。

イントラマートにその機能は存在するのですが。。。
v7.1から追加された機能のようで。。。
悲しいかなv6.1にはないのです。。。叫び

仕方が無いので自作しました。パンチ!



1.ログインブロック状態を保持するテーブル作成

ログインブロック状態をデータベーステーブル上に保持することにしました。
テーブル定義は以下の通りです。
※データベースは「Oracle」を利用しています。

テーブル定義(M_LOGIN_BLOCK)
CREATE TABLE M_LOGIN_BLOCK
(
LOGIN_GROUP VARCHAR2(20) NOT NULL,
BLOCK CHAR(1) NOT NULL,
CONSTRAINT PK_LOGIN_BLOCK PRIMARY KEY (LOGIN_GROUP) USING INDEX,
CONSTRAINT CK_BLOCK CHECK (BLOCK IN ('0', '1'))
)
/
COMMENT ON TABLE M_LOGIN_BLOCK IS 'ログインブロックマスタ'
/
COMMENT ON COLUMN M_LOGIN_BLOCK.LOGIN_GROUP IS 'ログイングループ'
/
COMMENT ON COLUMN M_LOGIN_BLOCK.BLOCK IS 'ブロック状態 (0:OFF 1:ON)'
/



2.ログインブロック状態レコードを追加

主キーは「ログイングループ」となっています。
ログインブロック対象となるログイングループ分のレコードを追加します。
※ログイングループの名前や数は実行環境の設定により異なります。
※以下は2つのログイングループに対するレコードを追加した例です。

INSERT INTO M_LOGIN_BLOCK VALUES ('group1', '1')
/
INSERT INTO M_LOGIN_BLOCK VALUES ('group2', '0')
/



3.認証モジュール設定変更

以下設定ファイルの設定を変更します。
(変更前) jp.co.intra_mart.foundation.security.certification.StandardUserCertification
(変更後) you2mura.security.servlet.LoginBlockUserCertification NEW

サーバマネージャ/conf/access-security.xml
<?xml version="1.0" encoding="UTF-8"?>
<access-security>
・・・
<user-security>
・・・
<certification>
<!--
<certification-class>jp.co.intra_mart.foundation.security.certification.StandardUserCertification</certification-class>
-->

<certification-class>you2mura.security.servlet.LoginBlockUserCertification</certification-class>
<certification-listener>
<listener-class>jp.co.intra_mart.foundation.security.activesession.UserActiveSessionRegister</listener-class>
</certification-listener>
<init-param>
<param-name>mobile-client-type</param-name>
<param-value>mobile</param-value>
</init-param>
</certification>
・・・
</user-security>
</security-config>
・・・
</access-security>



4.新認証モジュール作成

ログインブロック機能を実装した新認証モジュールを作成します。
※Javaによる実装となります。

LoginBlockUserCertification.java
package you2mura.security.certification;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jp.co.intra_mart.foundation.database.DatabaseManager;
import jp.co.intra_mart.foundation.security.SecurityConstraint;
import jp.co.intra_mart.foundation.security.account.Account;
import jp.co.intra_mart.foundation.security.certification.LoginInfo;
import jp.co.intra_mart.foundation.security.certification.StandardUserCertification;

public class LoginBlockUserCertification extends StandardUserCertification {

@Override
public int certification(LoginInfo loginInfo, Account account,
HttpServletRequest request, HttpServletResponse response) {

Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;

try {
// データベース接続インスタンスを取得します。
String loginGroup = loginInfo.getLoginGroup();
con = DatabaseManager.getInstance().getLoginGroupConnection(loginGroup);

// ログインブロック状態を取得します。
ps = con.prepareStatement("SELECT COUNT(BLOCK) AS BLOCK FROM M_LOGIN_BLOCK WHERE LOGIN_GROUP = ? AND BLOCK = '1'");
ps.setString(1, loginGroup);
rs = ps.executeQuery();
rs.next();

// ログインブロック状態が有効であれば...
if (rs.getInt("BLOCK") > 0) {
// 認証エラーとします。
return SecurityConstraint.CR_NG;
}

// 標準認証メソッドを呼び出します。
return super.certification(loginInfo, account, request, response);

} catch (Exception e) {
// 認証エラーとします。
return SecurityConstraint.CR_NG;
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException ignored) {
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException ignored) {
}
}
if (con != null) {
try {
con.close();
} catch (SQLException ignored) {
}
}
}
}
}


目ポイント
  1. 変更前の認証モジュール(標準のユーザ用認証クラス)を継承しています。
  2. 認証メソッド「certification」をオーバーライドしています。
  3. オーバーライドした「certification」メソッド内でログインブロック状態を取得しています。
  4. ブロック状態であれば認証エラーとしています。
  5. ブロック状態でなければ継承元の標準認証メソッドを呼び出しています。



今回はここまで。グッド!



自分のサイトにフォローボタンを設置

今日?ツイッター社より、
フォローボタン素材が提供されたようですね。

設置は簡単、
以下ヘルプを見ればすぐできるので、
本ブログのサイドバーに設置してみました。


右矢印自分のサイトにフォローボタンを設置するには

ここ(Configure your Follow Button) に、
ボタンをカスタマイズするためのプロパティも記載されています。




但し、貼り付けパーツは、当然のことながら <SCRIPT> もしくは <IFRAME> を含むため、

アメブロでは...

サイドバーに埋め込むしかないですね...ガーン





Movable Typeブログ拡張パーツ&デザインガイド―プラグインや無料サービスを活用したブログの機能/デザインパワーアップ術
エ・ビスコム・テック・ラボ
毎日コミュニケーションズ
売り上げランキング: 622686


サイドバー・パーツ大全―ブログをカスタマイズする
武井 一巳
メディアテック出版
売り上げランキング: 1281020

Opera Mini Web browser レビュー

今朝、ツイッターで、
Opera Mini Web browser
がアップデート(6.0.0.13548)されていることを知りました。ビックリマーク

このブラウザ、
iPhone 3GS を使っていた頃にリリースされたと思いますが...
即ガッカリ して、即削除 した記憶があります...
フレームページが上手く表示できなかったり...
拡大縮小機能が貧弱だったり... ガーン

App Store の評価は高く、星4つ 星星星星 もついてたので、
少しだけ期待して iPhone 4 にインストールしてみました。



起動した感じは上々、
とりあえず、デフォルト設定のまま、
以下画面をざっくり、Safari と見比べてみました。

・アップルのトップページ
・アメブロページ(パソコン版)
・アメブロページ(モバイル版)



検証1:アップルのトップページ

パッと見は違いに気がつきませんが...

$ソフトウェア開発会社で働く社員のアメブロ$ソフトウェア開発会社で働く社員のアメブロ
(左)Safari (右)Opera


拡大して良く見てみると...
メニューの表示が異なっていました。
Operaだとメニューが二段になっちゃってます... ガーン

$ソフトウェア開発会社で働く社員のアメブロ$ソフトウェア開発会社で働く社員のアメブロ
(左)Safari (右)Opera


また、
Hot News Headlines 右横の文字(ニュース)が、
Safariでは、動的に切り替わるのですが、
Operaでは特に動きがなく切り替わりませんでした... ガーン

$ソフトウェア開発会社で働く社員のアメブロ$ソフトウェア開発会社で働く社員のアメブロ
(左)Safari (右)Opera



検証2:アメブロページ(パソコン版)

Operaは余白や行間が詰められて表示されているような...
Safariの方がPCブラウザ(Safari/Chrome/IE等)で閲覧した時に近い気がしました。
※PC版Operaでもそうなんですかねぇ?...

$ソフトウェア開発会社で働く社員のアメブロ$ソフトウェア開発会社で働く社員のアメブロ
(左)Safari (右)Opera



検証3:アメブロページ(モバイル版)

Operaはボタン位置がずれてたりして...
Safariは特にそんなこともなく表示されています。

$ソフトウェア開発会社で働く社員のアメブロ$ソフトウェア開発会社で働く社員のアメブロ
(左)Safari (右)Opera



番外編:画質を高画質以外にしてみたら...

Operaの画像設定を「高画質」から「低画質」にして、
アップルのトップページを表示してみたら...

$ソフトウェア開発会社で働く社員のアメブロ

あれっ!?
iPadを持つ手の画像が表示されなくなっちゃった... 叫び
ちなみに「中画質」でも同様でした...
何ででしょうか...





とりあえずこんな感じでした。

まだ少ししか触ってないのですが...
やっぱり Safari でいいね って感じです。
とりあえず即削除はしませんが(苦笑)





ブラウザのしくみ
ブラウザのしくみ
posted with amazlet at 11.05.26
佐藤 信正
技術評論社
売り上げランキング: 194436


Google API Expertが解説するHTML5ガイドブック
羽田野 太巳 白石 俊平 古籏 一浩 太田 昌吾
インプレスジャパン
売り上げランキング: 2926


HTML5+CSS3で作る  魅せるiPhoneサイト  iPhone/iPad/iPod touch対応
谷拓樹
ラトルズ
売り上げランキング: 1232