大大們好:
我想要再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>
Action中用dao找出來的物件怎跟 "admin" 字串比對? IDE 應該有告訴你錯誤吧!
建議是這樣子比對,可減少 NullPointerException 問題
("admin").equals(UserID)
按鈕的 type="submit"
改成 type="button"
,就不會click後仍觸發submit
另外 action 的
if (usdao.find(userID, password)!=("admin")
&& usdao.find(userID, password)!=("admin")) {
}
判斷不是同一件事情嗎...?
去Google找jsp realm 然後爬個文
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"
,這樣會傳輸量會增加不少。