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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

2回答

5646閲覧

springで@SessionAttributesでセッションが正しく受け取れない

y-baminami

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2018/06/28 12:35

前提・実現したいこと

springでセッションにFormオブジェクトを受け渡したいのですが、
うまくいきません。

発生している問題・エラーメッセージ

ログインに成功した際にユーザ情報(ID,PW,ロール[adminかuser])を セッションで受け渡したいです。 ログインページではIDとPWのみ打つのでそれを基にDBからロールを引っ張ってきて セッションに格納しているのですが、ロールがnullになってしまいます。 どなたかご教授お願いいたします。

該当のソースコード

ユーザ情報を格納するフォームクラス

java

1 2public class LoginForm { 3 4 private String userId; 5 private String password; 6 private String role; 7 8 public String getUserId() { 9 return userId; 10 } 11 public void setUserId(String userId) { 12 this.userId = userId; 13 } 14 public String getPassword() { 15 return password; 16 } 17 public void setPassword(String password) { 18 this.password = password; 19 } 20 public String getRole() { 21 return role; 22 } 23 public void setRole(String role) { 24 this.role = role; 25 } 26} 27

コントローラクラス(DB周りの記述は割愛しました)

java

1@Controller 2@SessionAttributes(value = "userSession") 3public class HomeController { 4 5 @Autowired 6 private JdbcTemplate jdbcTemplate; 7 //ログインページの表示 8 @RequestMapping(value = "/", method = {RequestMethod.GET, RequestMethod.POST}) 9 public String loginView() { 10 return "login"; 11 } 12 //ログイン処理 13 @RequestMapping(value = "/login", method = RequestMethod.POST) 14 public String login(Model model, @ModelAttribute("LoginForm")LoginForm loginForm) { 15 loginForm.setRole("adimins");//本当はDBからロールの値を受け取る 16 setLoginForm(loginForm); 17        return "forward:home"; 18 } 19 //ホーム画面にセッション情報を受けわたして表示 20 @RequestMapping(value = "/home", method = {RequestMethod.GET, RequestMethod.POST}) 21 public String home(Model model, @ModelAttribute("userSession")LoginForm userSession) { 22     model.addAttribute("user", userSession); 23 return "home"; 24 } 25 26 @ModelAttribute("userSession") 27 public LoginForm setLoginForm(LoginForm loginForm){ 28 return loginForm; 29 } 30

ログインページのjsp

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 4<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form"%> 5 6<%@ page session="false" %> 7<html lang="ja"> 8 <head> 9 <title>ログイン画面</title> 10 </head> 11 <body> 12 <h2>つぶやきアプリ</h2> 13 <h3>ログイン</h3> 14<f:form modelAttribute="LoginForm" action="/TsubuyakiApp/login" method="post"> 15 <p>ユーザID:<input type="text" name="userId" required/></p> 16 <p>パスワード:<input type="text" name="password" required/></p> 17 <input type="submit" name="login" value="ログイン" />&nbsp; 18 <input type="reset" name="reset" value="リセット" /> 19 </f:form>> 20 </body> 21</html>

ホーム画面のjsp

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 4 5<html> 6<head> 7 <title>一覧表示画面</title> 8</head> 9<body> 10<h2>つぶやきアプリ</h2> 11 <br> 12 <p> 13 <c:out value="${user.getUserId()}" />&nbsp;<a href="logout">ログアウト</a>&nbsp; 14 <c:if test="${user.getRole().equals('admins')}" ><!--ここが機能しなくて困ってます --> 15 <a href="userList">ユーザ管理</a> 16 </c:if> 17 18 </p> 19 <input type="button" onclick="location.href='tweet'"value="書き込み"> 20 <br> 21 <table border="1" cellspacing="0"> 22 <tr> 23 <th>名前</th> 24 <th>つぶやき</th> 25 <th>日時</th> 26 </tr> 27 <c:forEach var="str" items="${list}"> 28 29 <tr> 30 <td><a href="personTweetList/${str.NAME}"><c:out value="${str.NAME}" /></a></td> 31 <td><c:out value="${str.TSUBUYAKI}" /></td> 32   <td><c:out value="${str.DATE}" /></td> 33 </tr> 34 </c:forEach> 35 36</table> 37</body> 38</html> 39 40

試したこと

ロールだけnullになってしまうのでロールは別にStringの変数としてセッションに格納しようとしても
nullでした。。。
また、セッション格納の際@ModdelAttributeではなく、model.addAttributeでもできるというサイトがあったので、それも試しましたが変わらずでした。

補足情報(FW/ツールのバージョンなど)

STS3.7.3.RELEASE
macOS Sierra

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

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

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

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

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

guest

回答2

0

認証方式がまちがえてるんじゃないの?

ドキュメント

<sec:authorize access="hasRole('supervisor')"> This content will only be visible to users who have the "supervisor" authority in their list of <tt>GrantedAuthority</tt>s. </sec:authorize>

投稿2018/06/29 05:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

とりあえず動かすだけなら、loginメソッドを以下のように修正すればいいと思います。

java

1 @RequestMapping(value = "/login", method = RequestMethod.POST) 2 public String login(Model model, @ModelAttribute("LoginForm") LoginForm loginForm) { 3 loginForm.setRole("adimins");// 本当はDBからロールの値を受け取る 4 model.addAttribute("userSession", loginForm); 5 6 return "forward:home"; 7 }

投稿2018/06/29 04:45

d-yosh

総合スコア270

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問