iT邦幫忙

0

Hibernate 如何再Action使用登入方法

大大們好:
我想要再Action裡面的login方法判端只能用帳密皆為"admin"的會員登入,請問我該怎麼去撰寫我的login方法?
這是我的Action:

 public String login(String userID, String password){ 
		 if (usdao.find(userID, password)!=("admin")
				 && usdao.find(userID, password)!=("admin")) {
		 }
		return "login";
	 }

這是DAO:

public List<UserValue> getUserID(UserValue uv) throws Exception {
		List<UserValue> list = new ArrayList<>();
		SessionFactory sf = HibernateUtil.getSessionFactory();
		try (Session session = sf.openSession();) {//
			session.beginTransaction();
			System.out.print("UserDAO.java check uv:::" + uv);
			System.out.print("UserDAO.java UserID::" + uv.getUserID());
			if (uv.getUserID() != null && !uv.getUserID().equals("")) { // userId
																		// 有值
				// select * from table where userId = '' and ...
				Criteria criteria = session.createCriteria(UserValue.class);
				criteria.add(Example.create(uv));// 解釋這行的功用
				list = criteria.list();
				return list;
			} else { // userId無值
				// select * from table;
				list = session.createCriteria(UserValue.class).list();
				return list;
			}
		}
	}

這是我的登入JSP:
(這裡我想請問一下,為什麼function那樣的判斷,我在沒有填入任何值後點選登入,他還是可以進行跳轉頁面的動作?)

<script type="text/javascript">
	function login() {			
		if(document.getElementById("password").value== "" || 
         	   document.getElementById("userID").value == ""){			
         		 alert('使用者帳號////密碼不可為空');
         		return false;
         		}	
        	alert(document.getElementById("userID").value);
                document.forms[0].action = "user_login";              
                document.forms[0].submit();              		
	}   
</script>
<style>
	input{
    width: 15%;
    padding: 12px 20px;
    margin: 8px 0;
    display: inline-block;
    border: 1px solid #ccc;
    border-radius: 4px;
    box-sizing: border-box;
}
</style>
<body>
	<div>
		<h1>請登入</h1>
		<form action="hello" method="post" enctype="multipart/form-data">
			<label for="userID">使用帳號: </label><br /> 
			<input type="text" id="userID" name="userID" /><br />		
			<label for="password">使用密碼: </label><br />
			<input id="password" type="password" name="password" /><br />
			<br> <br />
			<input class="button" type="submit" value="登入" onclick="login()" style="vertical-align: middle"/>				
			<br /> <!-- type="button" changed to submit -->
		</form>
	</div>
</body>
</html>
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
Pychu
iT邦見習生 ‧ 2017-03-30 17:32:26

Action中用dao找出來的物件怎跟 "admin" 字串比對? IDE 應該有告訴你錯誤吧!
建議是這樣子比對,可減少 NullPointerException 問題

("admin").equals(UserID)
chousen iT邦新手 5 級 ‧ 2017-03-31 10:47:51 檢舉

謝謝!
已經解決這個問題了!!

0
Bo-Xuan Fan
iT邦見習生 ‧ 2017-03-30 22:25:07

按鈕的 type="submit" 改成 type="button",就不會click後仍觸發submit

另外 action 的

if (usdao.find(userID, password)!=("admin")
    && usdao.find(userID, password)!=("admin")) {
}

判斷不是同一件事情嗎...?

chousen iT邦新手 5 級 ‧ 2017-03-31 10:47:21 檢舉

已經更正了!謝謝指導

0
Javabean718
iT邦見習生 ‧ 2017-03-31 05:58:40

去Google找jsp realm 然後爬個文

fillano iT邦超人 1 級 ‧ 2017-03-31 09:05:27 檢舉

我是覺得用struts加上hibernate應該會更精準XD

chousen iT邦新手 5 級 ‧ 2017-03-31 10:46:47 檢舉

回兩位大大:
JavaBean:我會多爬文的!謝謝!
dillano:我有使用XD 只是沒PO出來,因為設定都OK了!

0
fillano
iT邦超人 1 級 ‧ 2017-03-31 09:04:40
public String login(String userID, String password)
{
    if (usdao.find(userID, password) != ("admin"))
    {
        return "notlogin";
    }
    else
    {
        return "login";
    }
}

你的action邏輯應該要這樣吧?你現在的程式是一律返回"login",當然不論是誰都會登入。

另外一個小問題,不算錯誤。就是除非你要上傳檔案,不然form並不需要加enctype="multipart/form-data",這樣會傳輸量會增加不少。

chousen iT邦新手 5 級 ‧ 2017-03-31 10:50:01 檢舉

嗯嗯好,小弟的邏輯還是很新生兒...XD
會再加強的!
return的部分已經清楚了,謝謝指導!

我要發表回答

立即登入回答