Java Springの逆引きメモ -11ページ目

Java Springの逆引きメモ

JavaのSpring frameworkのメモを書いていきます!
初心者の勉強ノートなので間違いがあるかもしれませんが、何かヒントになることがあれば幸いです。

あまりいい方法ではないですが、1行のレコードをMapにして、

Mapを配列として受け取りたい場合があると思います。


List<Map<String, Object>>


この方法を見てみましょう。

簡単です!えっ


これは、SpringJDBCの機能そのままなので、受け取り部分だけ記述します。

全体のコードは、以下を参照してください。

・DBからデータを取得するには?(NamedParameterJdbcTemplateのサンプル)




【サンプルコード(Dao部分のみ)】

public List<Map<String, Object>> findMember(MemberSearchKey key) {
  //
  String sql = "select * from t_member ";
  String where = createWhere(key);
  
  //
  if(!where.equals("")){
   sql += " where " + where;
  }
  
  //会員リスト
  List<Map<String, Object>> result
    = this.namedParameterTemplate.queryForList(sql, key);
    
  return result;
 }





【説明】

特に説明することはありません。

queryForListを呼ぶだけです。


Springの機能は簡単ですがいろいろサポートしていて楽です。

ここでは、NamedParameterJdbcTemplate クラスでメソッドを呼んでいますが、

SimpleJdbcTemplate クラスにもこのメソッドは用意されています。



【補足】

DBのselectの結果をMapの配列で受け取るのはあまり良い方法ではありません。

例えば、最大でも20件くらいしか結果が返らないことが分かっているような(数が少ない)場合はOKです。

しかし、100件、1000件以上返る可能性がある場合は、避けたほうがいいと思います。


というのは、Mapはかなりメモリを消費するからです。

多用すれば、GCの原因にもなるでしょう。


また、保持しているオブジェクトの型がはっきりしません。(Object型なので)

そうすると、使用者が型の間違いをしたり、後で型が変わったときにリファクタリングできないので

コードを非常に変更しにくくします。


なるべくクラスを作成してそれをListにし、setter/getterで値を操作するようにしましょう!



参考:

・DBからデータを取得するには?(SimpleJdbcTemplate のサンプル)

・DBからデータを取得するには?(NamedParameterJdbcTemplateのサンプル)

・NamedParameterJdbcTemplateをうまく使うには?



今回は、実際に自分でAOPで織り込む機能を実装してみましょう!

織り込むクラスをインターセプターと呼びます。

ここでは、指定のメソッドの実行ログを取るインターセプターを作ってみます。


早速、実装を見てみましょう。




【インターセプタコードサンプル】

package aop;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.log4j.Logger;

public class LoggingInterceptor implements MethodInterceptor {
 public Object invoke(MethodInvocation invocation) throws Throwable {
  //
  Logger log = Logger.getLogger(invocation.getMethod().getName());
  log.info("logging_start: ");
  log.info("logging_method: '" + invocation.getMethod().getName() + "' of class["
    + invocation.getThis().getClass().getName() + "]"
); //メソッド実行 Object ret = null; try{ ret = invocation.proceed(); }catch(Exception e){ log.error("logging_exception: ", e); throw e; }finally{ log.info("logging_end: return=" + ret); } return ret; } }


【Spring設定ファイルの記述例】


<bean id="logging" class="aop.LoggingInterceptor" />
<aop:config>
<aop:advisor pointcut="execution(* execute(..))" advice-ref="logging" />
</aop:config>


【説明】

自作でインターセプタを作成するときは、MethodInterceptor をimplemetnsして作成します。

これは、メソッド処理の実施前後を乗っ取るときに使用します。

他にも、メソッドの処理前、処理後、例外が発生したときだけ実施する、などいくつか種類があります。

といっても、MethodInterceptor を使用すれば処理前後、例外発生時、どれでも処理を織り込めます。

なので、面倒ならこれをいつでも使用してもいいかもしれません。

ただ、クラスの意味合いを明確にしたい場合は、それぞれの処理にあったinterfaceを使用しましょう。


さて、実際の実装ですが、invokeメソッドを記述するだけです。


メソッドには、MethodInvocation が渡ってきます。

これには、実際にメソッドに渡ってくる引数や、メソッド名など様々な情報が入っています。

これを使用すればいろいろできます!



<注意点>

注意点は、織り込む前の本当のメソッドの処理を以下のようにインターセプタ内で実行する必要があることです。

 invocation.proceed();

これを記述しないと、本当のメソッドの処理が実行されません。




【出力例】

2009-04-05 15:44:38,843 [http-8080-Processor24] INFO execute - logging_start:
2009-04-05 15:44:38,843 [http-8080-Processor24] INFO execute - logging_method: 'execute' of class[presentation.action.MemberSearchAction]
2009-04-05 15:44:38,843 [http-8080-Processor24] INFO execute - logging_end: return=ForwardConfig[name=input,path=/WEB-INF/jsp/member_search_input.jsp,redirect=false,module=null,extends=null,catalog=null,command=null]

 返り値の値まで出力されています!



【メリット】

上記のSpringの設定で記述したのは、StrutsのActionのexceuteに織り込みました。

普通にやろうとすると、StrutsのActionの派生クラスにすべてログの処理を入れるか、もしくは

基底クラスを作成して、そちらに共通処理用のメソッドを記述するしかありません。

後者の方がやり方としてはマシなやり方です。


しかし、基底クラスを必ず継承しないといけないという制限が付きます。

これは、システムが大きくなって処理を統一化しにくくなったときに大きな制限になります。


AOPによって設定のみで自由にログを出力するメソッドを変更したり、ログ出力を止めることがことができるのはかなりなメリットになるのです。




AOPの概要や注意点は、以下の参考を見てみてください。



参考:

・DIxAOPの機能について

・Springに付属のAOPサンプルのログトレースを動かすには? (用意されたクラスを使用する方法)


Springにはすぐに使用できるAOP用のクラスが用意されています。

そのうちのひとつであるトレースログをするクラスを見てみましょう。

AOPのおおよその設定方法が分かっていれば簡単です。




【Spring設定ファイルの設定例】

Springの設定ファイルに以下の記述を追加します。


<bean id="debugInterceptor" class="org.springframework.aop.interceptor.DebugInterceptor"/>

<aop:config>
<aop:advisor pointcut="execution(* loadUserByUsername(..))" advice-ref="debugInterceptor" />
</aop:config>


【Log4jの設定ファイルの設定例】

log4j.logger.org.springframework.aop.interceptor.DebugInterceptor=DEBUG, stdout
log4j.additivity.org.springframework.aop.interceptor.DebugInterceptor=false




【説明】

実装自体は既にSpringがしてくれているので、設定ファイルに記述するだけです。

Springが用意しているトレースログ用のクラスは以下の名前です。

org.springframework.aop.interceptor.DebugInterceptor

ただし、用意されたクラスはログのレベルがDEBUGでないと動作しません。

そこで、Log4jにも設定が必要です。



<Springの設定ファイルについて>

DIの基本的な設定ファイルは、以下を参照してください。

・DIの設定ファイルを書くには?


あとは、AOPの普通の設定どおりに設定するだけです。

上記の例では、メソッド名がloadUserByUsernameのものすべてに織り込んでいます。

分からない方は、以下を参照してください。

・DIxAOPの機能について



<Log4jの設定ファイルについて>

これも、普通のLog4jの設定どおりです。

分からない方は以下を参照してください。

・実行したSQL文のログを出力するには?  (説明のところでLog4jの説明もしています)




【出力例】

2009-04-05 14:45:52,015 [http-8080-Processor24] DEBUG org.springframework.aop.interceptor.DebugInterceptor - Entering ReflectiveMethodInvocation: public abstract org.springframework.security.userdetails.UserDetails org.springframework.security.userdetails.UserDetailsService.loadUserByUsername(java.lang.String) throws org.springframework.security.userdetails.UsernameNotFoundException,org.springframework.dao.DataAccessException; target is of class [org.springframework.security.userdetails.memory.InMemoryDaoImpl]; count=1
2009-04-05 14:45:52,015 [http-8080-Processor24] DEBUG org.springframework.aop.interceptor.DebugInterceptor - Exiting ReflectiveMethodInvocation: public abstract org.springframework.security.userdetails.UserDetails org.springframework.security.userdetails.UserDetailsService.loadUserByUsername(java.lang.String) throws org.springframework.security.userdetails.UsernameNotFoundException,org.springframework.dao.DataAccessException; target is of class [org.springframework.security.userdetails.memory.InMemoryDaoImpl]; count=1



どうです?

うまく行きましたか?



参考:

・DIxAOPの機能について

・実行したSQL文のログを出力するには?

SpringによるAOPの導入


ここでは、SpringSecurityの簡単な使用方法をみてみます。

設定ファイルにログイン情報(ユーザと権限)を設定するやり方です。


まず、こちらの記事を先に読んで全体を把握しておいた方がいいかと思います。

 ・SpringSecurityの機能について



【web.xmlの設定】

以下の記述を記述します。

SpringSecurityはフィルターで実現している機能ですので、フィルターの設定になります。

フィルターの最初の方で動作するように、最初の方に記述します。

キャラクタのエンコードのフィルター を設定している場合は、その後ろに記述します。


<!-- WEBの設定です --> 
<display-name>sample</display-name>
<welcome-file-list>
   <welcome-file>/login.jsp</welcome-file>
</welcome-file-list> 

<!-- Springの設定です --> 
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml /WEB-INF/applicationSecurity.xml </param-value>
</context-param>
 
<!-- SpringSecurityのフィルター設定です -->
<filter>
  <filter-name>springSecurityFilterChain</filter-name>
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name> 
  <url-pattern>/*</url-pattern>
</filter-mapping>



【SpringSecurityの設定(applicationSecurity.xml)】

SpringSecurityは、Springの設定ファイルで設定します。

たいていの場合は、SpringSecurityの設定だけでファイルを分けた方がいいと思います。

ここでもファイルを分けた設定例を記述します。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:sec="http://www.springframework.org/schema/security" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd "> <!-- 認証と認可の設定です --> <sec:http auto-config="true" access-denied-page="/403.jsp" > <!-- 認可のURL設定 --> <sec:intercept-url pattern="/secure/sys*" access="ROLE_ADMIN"/> <sec:intercept-url pattern="/secure/usr*" access="ROLE_ADMIN,ROLE_USER"/> <sec:intercept-url pattern="/secure/**" access="IS_AUTHENTICATED_FULLY"/> <sec:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/> <!-- 認証の設定 --> <sec:form-login login-page="/login.jsp" default-target-url="/top.jsp" authentication-failure-url="/error.jsp"/> <sec:logout logout-url="/logout" logout-success-url="/login.jsp" invalidate-session="true"/> <sec:anonymous granted-authority="ROLE_ANONYMOUS"/> </sec:http> <!-- ログインユーザの情報の設定。SQL文を指定してDBから取得する方法もあります。 --> <sec:authentication-provider> <sec:user-service> <sec:user password="admin" name="admin" authorities="ROLE_ADMIN"/> <sec:user password="user" name="user" authorities="ROLE_USER"/> </sec:user-service> </sec:authentication-provider> </beans>




【画面の作成例】

必要な画面は、以下のものです。ここでは単純なサンプルを書きます。


<ログイン画面(login.jsp)>

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ログイン</title>
</head>
<body>


<form name="f" action="<c:url value='j_spring_security_check'/>" method="post">
<table class="login">
<tr>
<th>ログインID</th>
<td><input type="text" name="j_username"></td>
</tr>
<tr>
<th>ログインPW</th>
<td><input type="text" name="j_password"></td>
</tr>
</table>

<input type="submit" name="login" value="ログイン">
</form>


</body>
</html>


<認証エラー(error.jsp)>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Insert title here</title>
</head>
<body>
認証に失敗しました。<br>
<input type="button" onclick="javascript: history.back();" value="戻る">
</body>
</html>



<権限エラー(403.jsp)>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Insert title here</title>
</head>
<body>
閲覧権限がありません。<br>
<input type="button" onclick="javascript: history.back();" value="戻る">
</body>
</html>






【ファイル構成】

上記のそれぞれのファイルの置き場所を記述します。

WebContent

  ├403.jsp

  ├error.jsp

  ├login.jsp

  ├WEB-INF

     ├applicationContext.xml

     ├applicationSecurity.xml

     ├web.xml




【設定の説明】

上記の設定をすればなんとか動くかと思います。


web.xml

設定は、フィルターに設定します。

SpringSecurityはSpringの設定ファイルで設定するため、Springで読み込むファイルとしてcontext-paramに設定をします。

url-patternには、SpringSecurityの機能を適用したいパスを設定します。

ここでは、/*になっているのですべてのパスに対して適用されます。



applicationSecurity.xml

独自の拡張が必要ない場合、2つのタグを設定するだけです。


<httpタグの主な属性>

属性名 概要
auto-config

コンフィグを自分の設定で行うかどうか。

独自の拡張をしない場合はtrueにします。

独自の拡張をする場合はfalseを設定して、entry-point-ref属性を設定したり、form-loginタグを削除するなどいくつか設定を変えないといけません。

設定値:true(デフォルト値)/false

access-denied-page

認可が失敗したとき(表示権限がないとき)に表示する画面を指定する。

設定例:/403.jsp

entry-point-ref

独自の機能を追加する場合に指定します。

SpringSecurityでは機能を細かく分解していて、それらをチェーンして順番に適用していくという方式を取っています。ですので、独自の機能をつけるときもそのうちの一つとして実装します。(これをフィルターと呼んでいます。tomcatのフィルターと同じものです。)

このとき、どの位置に自作の機能を入れるかを決めるのがこの属性です。

設定例:authenticationProcessingFilterEntryPoint

(独自機能自体はbeanで設定し、そのbean名をこの属性で指定します)

path-type

intercept-urlタグで認可のパスを指定するときに、どのような形式で指定するか。

ant・・・ant形式です(デフォルト値。*,**,?など使用できます)

regex・・・正規表現形式です。




<httpタグ内で使用できる主なタグ>

タグ名 概要
intercept-url

認可のパス名と閲覧を許す権限を指定します。

上記のpath-type属性で指定の仕方は変更できます。

属性:

pattern・・・パス名を指定します。(上記のpath-type属性参照)

access・・・閲覧を許すロール名を指定します。

      必ず先頭に"ROLE_"が付いている必要があります

      付いていない場合、設定エラーになります。

      また、予約語※も存在し、それを使用すると設定が楽に

      なります。

method・・・アクセス時のメソッドを指定します。

      設定値:GET, DELETE, HEAD, OPTIONS, POST, PUT

      何も指定しなければ「なんでも良い」、となります。

requires-channel・・・指定したアクセスでないとエラーにします。

      設定値:http, https, any(デフォルト値)

form-login

ログインのための情報を設定します。

SpringSecurityではURLを指定する場合、必ず/を頭につけることを忘れないでください。

属性:

login-page・・・ログイン画面を指定します。

default-target-url・・・認証成功後に表示する画面。

authentication-failure-url・・・認証失敗時に表示する画面。

always-use-default-target・・・ログイン後の画面を強制的に 

  default-target-urlで指定した画面に遷移するかを設定します。

  通常は、最初にアクセスしたURLに遷移します。

  最初にアクセスしたのがログイン画面のときに

  default-target-urlで指定した画面に遷移します。

  設定値: true/false(デフォルト値)

logout

ログアウトのための情報を設定します。

属性:

logout-url・・・ログアウト処理をするURLを指定します。

logout-success-url・・・ログアウト成功後に表示する画面。

invalidate-session・・・ログアウト時にセッションを無効にするか?

         設定値: true(デフォルト値)/false

anonymous

anonymousユーザの設定をします。

属性:

granted-authority・・・ロール名を指定します。ここで設定したロール名がanonymousユーザになります。

デフォルト値は"ROLE_ANONYMOUS"。

concurrent-session-control

1ユーザが持てるセッション数を制限します。

属性:

max-sessions・・・1ユーザが持てるセッション数

exception-if-maximum-exceeded・・・trueにするとセッション数を制限するようになります。


※予約語 (主な予約語は以下のとおりです)

IS_AUTHENTICATED_FULLY ・・・認証されたユーザすべて

IS_AUTHENTICATED_ANONYMOUSLY・・・認証されたユーザと認証されていないユーザすべて




<authentication-providerタグの主な属性>

属性名 概要
user-service-ref

ユーザサービスを指定します。

通常は必要ありません。




<authentication-providerタグ内で使用できるの主なタグ>

タグ名 概要
user-service

このタグ内でユーザとロールを設定できます。

つまり、このタグでログインユーザ情報を設定を記述できます。

(DBなどを使用することなく)

jdbc-user-service

DBからユーザとロールの設定を取得します。

属性:

authorities-by-username-query・・・認証を許可するユーザを取得するSQL文を記述します。

group-authorities-by-username-query・・・認可の設定を取得するSQL文を記述します。

password-encoder

パスワードを暗号化するかどうかを設定します。

具体的には、パスワードをハッシュなどで変換した後の値に対して認証をするのかを設定します。

この設定をする場合、パスワードの設定値はハッシュ値を設定することになります。

-

-




【JSPのtaglibについて】

SpringSecurityでは、独自のtaglibを用意しています。

これを使用することで、JSP上で閲覧を許しているロールに対してだけリンクを表示するなど、様々なことができます。

また、別の記事で書こうと思います。



【注意点】

・SpringSecurityでは、ログイン成功後の画面の表示にはリダイレクトを使用しています。

 ログイン画面の閲覧権限を許可していなかったり、設定を誤ると、無限リダイレクトループすることがあります。

 その場合は、単なる設定誤りなので、慎重に分析して設定ファイルを修正しましょう。


・設定のURLは必ず先頭にスラッシュ"/"をつけます。入れないとうまく動きません。


・ロール名には、必ず先頭に"ROLE_"をつけます。つけないと設定エラーになって起動がうまく行きません。





ここでは、独自の拡張をしない場合で、DBも使用しない簡単な例を見ました。

DBを使用する場合、独自の拡張をする場合はまた別の記事で見てみようと思います。


また、SpringSecurityの概要は以下の参考を読んでみてください。



参考:

・SpringSecurityの機能について

・DBのユーザ情報を使用して認証するには? (実践編:DBを使用する方法)

taglibの利用例:

・ログイン後の画面にログインしたユーザを表示するには? (ログイン情報の表示方法)

・ロール(権限)によって画面のリンクの表示/非表示を制御するには?

・閲覧許可がある画面のリンクのみ表示するには?

外部リンク:

SpringSecurityの本家HP(設定で使用できるタグ)


Spring Securityの機能について簡単に見ていきましょう。


SpringSecurityは、認証と認可の機能を提供してくれます。

WEBが分かりやすいと思いますが、一般的なWEBは、IDとパスワードを入力して両方とも合っていればログインできると思います。

この処理を認証と呼んでいて、さらに認証できた人に対してある画面を見せるか見せないか、という閲覧権限の機能も存在します。

これを認可と言います。


SpringSecurityでは両方ともを設定ファイルのみで実装できます

かなりパワフルな機能です。


しかも、拡張して独自の機能をつけることもできます。


また、WEBだけでなく普通のJavaアプリケーションに対しても認証と認可の機能を実装できるようです。



【機能の実際】

ここでは、SpringSecurityのWEBの認証と認可の処理がどのような機能なのかを簡単に見てみましょう!


項目 概要
ログイン方法

一般的な認証と同様、ログイン画面からID/PWを入力してWEBに入ります。

ログアウト方法

指定のURLにアクセスするとログアウトします。

このとき、セッションの情報を保持しておくこともできるようです。

これにより、次回ログイン画面を開いたときに、最後にアクセスしたユーザのIDを表示することもできるようです。

認証が必要な画面にログインせずにアクセスした場合

ログイン画面に強制的に遷移させられます。

その後、ログインに成功すると最初にアクセスしようとした画面を表示します。

ログイン後、常に指定の画面を表示するようにすることもできます。

権限ロール

権限ロールがあり、自由に追加できます。

SpringSecurityでは、権限ロール自体に何か意味があるのではなく、グループを分けるグループ名くらいの意味しかありません。

ただし、予約名が存在し、それは意味が決まっています。

良く使う予約名には以下のものがあります。

IS_AUTHENTICATED_FULLY ・・・認証されたユーザすべて

IS_AUTHENTICATED_ANONYMOUSLY

・・・認証されたユーザと認証されていないユーザすべて

認可の方法

WEBのパス名に対して認可をします。(リクエストパラメタに対して行う方法もあるようですがここでは説明しません。)

設定イメージは、以下のようになります。

【設定イメージ】

/secure/sys* ⇒ ROLE_ADMIN

/secure/* ⇒ ROLE_ADMIN,ROLE_USER

/** ⇒ IS_AUTHENTICATED_ANONYMOUSLY


【意味】

設定の順番には意味があります。

上から順番にURLを見ていき、最初に引っかかったところでロールのチェックをします。

では、上記の例の場合を見てみましょう。

-----------------------------

/secure/の下の頭に"sys"が付くURLに対しては、ROLE_ADMINというグループに閲覧を許します。

上記以外の、/secure/直下のURLに対しては、ROLE_ADMIN と ROLE_USERというグループに閲覧を許します。

上記以外の、ドキュメントルート配下のURLに対しては、すべてのユーザに閲覧を許します。

-----------------------------


*は、ワイルドカードで/以外の文字を表します。

上記では、/security/sysTop.do や/security/sysRegist.doなどが対象になります。

**はディレクトリまで含めてすべてのワイルドカードです。

上記では、/A/include/main.css や /login.html などが対象になります。

組み込み方法    

SpringSecurityは、どうやって機能を実現しているのでしょうか?

実は、SpringSecurityはtomcatのフィルター 機能なのです。

ですので、Servletを実装するときに、何か特殊なクラスを継承しないといけないとか、必ず何かのメソッドを呼ばないといけないなどの制約を受けません。

Strutsを使っても、SpringMVCを使ってもかまいません!




【動作】

上記で、ログイン・ログアウト、認可の方法がなんとなく分かったと思います。

ここでは、実際のログインの動作を見てみましょう。

基本の動きは、リダイレクトを使用しています。


 ①ログイン画面を表示します

 ②ID/PWが送信されると認証を行います。認証NGなら指定のエラー画面を表示します。

 ③認証OKなら、リダイレクトで指定のURLに遷移します。


③では、上記一覧表の「認証が必要な画面にログインせずにアクセスした場合」の内容も見てみてください。

こんな機能もあります。



【注意点】

パス名で認可をするため、パスの命名規則はしっかりと設計しておいた方がいいと思います

これはシステムを設計する段階で決めておくべきです。

なぜならたいていの場合、デザイン(HTML)にパスをハードコーディングすることになるので、後ですべてのパスを変更するのが大変だからです。


ワイルドカードの"*"が使用できないので大変!、というだけで、設定できないわけではありません。

ですので、既に使用されているシステムに途中からSpringSecurityで認証・認可の機能をつけることはできます。


ただ、システムを新規作成するときにSpringSecurityの導入を決めているなら

設定しやすいようにパスの命名規則を決めておいた方がいいと思います!




【機能拡張について】

機能拡張は他の記事 で触れようと思います。

ここでは軽く触れるにとどめます。

Springは基本的に、設定のタグ1つに付き、1つのクラスが担当するので、変更したい設定タグの機能が

どのクラスに相当するのかを調べて、そのクラスを拡張するだけでよいです。


ただし、認証のフィルタについて勉強しておく必要があります。

大雑把に書きますが、SpringSecurityの機能は複数のフィルタで成り立っていて、順番にフィルタが実行されています。

フィルタは実行順番が決まっているので、目的の機能の前にフィルタが働いて、そこで処理が終わると

自分が作った機能まで処理が回ってこない可能性もあります。


この辺が注意点かと思います。





かなりパワフルな機能で、拡張しなくても事足りると思います。

ぜひぜひ使って楽をしましょうにひひ



参考:

・SpringSecurityの機能について

・実際に認証と認可をWEBにつけるには? (基礎編:設定方法)

・DBのユーザ情報を使用して認証するには? (実践編:DBを使用する方法)

・ログイン後の画面にログインしたユーザを表示するには? (ログイン情報の表示方法)

・ロール(権限)によって画面のリンクの表示/非表示を制御するには?

・閲覧許可がある画面のリンクのみ表示するには?

・拡張して、独自の機能をつけるには?

Spring Securityでラクラクセキュリティ対策