質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JSF

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

JavaServer Faces 2

JavaServer Faces(JSF)は、Webアプリケーションのユーザインタフェースを作成するためのフレームワークです。簡単に高機能なWebアプリケーションのインタフェースを作成することが可能です。

Q&A

解決済

1回答

1310閲覧

JavaServerFacesでログイン済みユーザしかアクセスできないページを定義したい

pen_ari

総合スコア50

JSF

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

JavaServer Faces 2

JavaServer Faces(JSF)は、Webアプリケーションのユーザインタフェースを作成するためのフレームワークです。簡単に高機能なWebアプリケーションのインタフェースを作成することが可能です。

0グッド

0クリップ

投稿2020/11/11 05:39

編集2020/11/11 05:41

前提・実現したいこと

ログインページから習得したユーザ名とパスワードを使用して認証を行い、認証成功後ウェルカムページにアクセスします。
このウェルカムページには認証済みユーザのみアクセスできるようにしたいです。(未認証ユーザが直接URLで来た場合はログインページへリダイレクトさせたい)
JavaEE初心者過ぎて、さっぱりわかりません。
ログイン画面にて表示されるユーザ名に@NotNullをつければいいかと思いましたが違いました
また、認証処理が独自かつ、web.xmlのログイン構成は管理者用のログイン構成をbasicで使用しており、使用できません。

該当のソースコード

index.html

html

1<?xml version='1.0' encoding='UTF-8' ?> 2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3<html xmlns="http://www.w3.org/1999/xhtml" 4 xmlns:h="http://xmlns.jcp.org/jsf/html"> 5 <h:head> 6 <title>ログインページ</title> 7 </h:head> 8 <h:body> 9 <h:form id="loginForm"> 10 <table> 11 <tr> 12 <td><h:outputText value="ユーザ名" /></td> 13 <td> 14 <h:inputText id="username" value="#{authentication.username}"/> 15 </td> 16 </tr> 17 <tr> 18 <td><h:outputText value="パスワード" /></td> 19 <td> 20 <h:inputSecret id="password" value="#{authentication.password}" /> 21 </td> 22 </tr> 23 </table> 24 <br/> 25 <h:commandButton id="changePasswordButton" 26 value="ログイン" 27 action="#{authentication.auth()}"/> 28 </h:form> 29 </h:body> 30</html>

Authentication.java

java

1import java.io.Serializable; 2import javax.enterprise.context.SessionScoped; 3import javax.inject.Named; 4 5@Named 6@SessionScoped 7public class Authentication implements Serializable { 8 9 private String username; 10 private String password; 11 12 public String getUsername() { 13 return username; 14 } 15 16 public void setUsername(String username) { 17 this.username = username; 18 } 19 20 public String getPassword() { 21 return password; 22 } 23 24 public void setPassword(String password) { 25 this.password = password; 26 } 27 28 public String auth() { 29 try { 30 // 認証処理(独自) 31 return "/welcome.xhtml?faces-redirect=true"; 32 } catch (Exception e) { 33 return null; 34 } 35 } 36};

welcome.xhtml

html

1<?xml version='1.0' encoding='UTF-8' ?> 2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3<html xmlns="http://www.w3.org/1999/xhtml" 4 xmlns:h="http://xmlns.jcp.org/jsf/html"> 5 <h:head> 6 <title>Facelet Title</title> 7 </h:head> 8 <h:body> 9 ようこそ 10 <h:outputText value="#{authentication.username}" /> 11 さん 12 </h:body> 13</html>

試したこと

@NotNull:インプット時のバリデーションのため無意味?付けてみてもバリデーションも有効化されていなさそうでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

画面遷移時に画面読み込み前に行うメソッドを以下で定義可能

html

1<f:event listener="#{authentication.checkAuth()}" type="preRenderView" />

ログイン状態でなければログイン画面へ遷移

java

1public void checkAuth() throws IOException { 2 if (!this.isAuth) { 3 ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); 4 externalContext.redirect(externalContext.getRequestContextPath() + "/faces/index.xhtml"); 5 } 6 }

投稿2020/11/13 02:12

pen_ari

総合スコア50

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問