FrontPage > Spring Bootの覚書 > Spring Security

リクエストに対する認可

URLによりアクセスできるユーザを制限する。

1. サンプル用ページの作成

  • トップページを作成し、一般ユーザページと管理者ページへのリンクを張る。

    (src/main/resources/templates/top.html)
    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <link th:href="@{/resources/css/base.css}" rel="stylesheet" type="text/css" />
    <title>Insert title here</title>
    </head>
    <body>
    <a th:href="@{/user/sample}">ユーザページ</a><br/>
    <a th:href="@{/admin/sample}">管理者ページ</a>
    <div th:if="${#httpServletRequest.remoteUser != null}">
    <span th:text="${#httpServletRequest.remoteUser}"></span>でログインしています。
     <form th:action="@{/logout}" method="post">
       <input type="submit" value="ログアウト" />
     </form>
    </div>
    </body>
    </html>
  • ユーザページを作成

    (src/main/resources/templates/user/userSample.html)
    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>Insert title here</title>
    <link th:href="@{/resources/css/base.css}" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <p> 
    このページはユーザページです。
    </p>
    <a th:href="@{/}">トップページ</a>
    </body>
    </html>
  • 管理者ページを作成

    (src/main/resources/templates/admin/adminSample.html)
    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>Insert title here</title>
    <link th:href="@{/resources/css/base.css}" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <p> 
    このページは管理者ページです。
    </p>
    <a th:href="@{/}">トップページ</a>
    </body>
    </html>
  • 作成したページのビューコントローラを追加
    トップページは"/"にマッピング。
    (src/main/java/com/ziqoo/sbSample/MvcConfig.java抜粋)
       @Override
       public void addViewControllers(ViewControllerRegistry registry) {
           registry.addViewController("/login").setViewName("login");
           registry.addViewController("/").setViewName("top");
           registry.addViewController("/user/sample").setViewName("user/userSample");
           registry.addViewController("/admin/sample").setViewName("admin/adminSample");
       }

2. URLに対する認可を設定

  • WebSecurityConfigクラスを修正する。
    • トップページは制限なし
    • 管理者ページはroleが"ADMIN"のユーザのみ許可
    • その他ページは認証要、roleの制限なし
      (src/main/java/com/ziqoo/sbSample/WebSecurityConfig.java抜粋)
         @Override
         protected void configure(HttpSecurity http) throws Exception {
             http
                 .authorizeRequests()
                     .antMatchers("/resources/**", "/").permitAll()
                     .antMatchers("/admin/**").hasRole("ADMIN")
                     .anyRequest().authenticated()
                     .and()
                 .formLogin()
                     .loginPage("/login")
                     .permitAll()
                     .and()
                 .logout()
                     .permitAll();
         }

3. ユーザー追加

  • ADMINのユーザを追加する。

    (src/main/java/com/ziqoo/sbSample/MvcConfig.java抜粋)
       @Autowired
       public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
           auth
               .inMemoryAuthentication()
                   .withUser("user1").password("naisho").roles("USER")
                   .and()
                   .withUser("user2").password("naisho").roles("ADMIN");
       }

4. 実行

  • トップページからユーザページをクリック
    user1(USER_ROLE)でログイン

    ss-top1.png
           
    ss-login5.png
           
    ss-userPage.png

  • トップページへ戻って管理者ページをクリック
    エラーが発生する。
    ss-adminPage-error.png

  • user2(ADMIN_ROLE)でログインしなおし、トップページより管理者ページをクリック

    ss-top2.png
           
    ss-adminPage.png




添付ファイル: filess-adminPage-error.png 263件 [詳細] filess-adminPage.png 246件 [詳細] filess-top2.png 252件 [詳細] filess-userPage.png 237件 [詳細] filess-login5.png 250件 [詳細] filess-top1.png 230件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-02-26 (木) 18:14:04 (2097d)