網站有3個登錄檔案,分別是login.jsp,check_login.jsp, login_success.jsp賬戶與密碼驗證通過則跳轉 login_success.jsp.
現在的問題是,實際上如果用戶知道了login_success.jsp,可以直接敲地址訪問,網上說通過 session機制解決,我想問問,在我的實體中怎么編代碼。
login.jsp的代碼如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登錄案例</title>
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
</head>
<body>
<div class="container">
<div class="row" style="margin-top: 30px">
<div class="col-md-4 col-md-offset-4">
<div class="panel panel-primary">
<div class="panel-heading">
<span class="glyphicon glyphicon-user"></span>登錄
</div>
<div class="panel-body">
<form action="check_login.jsp" method="POST" name="loginForm">
<div class="form-group">
<label for="name">用戶名</label> <input type="text"
class="form-control" name="name" placeholder="請輸入用戶名">
</div>
<div class="form-group">
<label for="">密碼</label> <input type="password"
class="form-control" name="pwd" placeholder="請輸入密碼">
</div>
<button type="submit" class="btn btn-primary"
onclick="return checkForm()">登錄</button>
</form>
</div>
</div>
</div>
</div>
</div>
</body>
<script
src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous">
</script>
<script type="text/javascript">
function checkForm() {
var name = loginForm.name.value;
var pwd = loginForm.pwd.value;
//alert(name + pwd);
if (name == "" || name == null) {
alert("請輸入用戶名");
loginForm.name.focus();
return false;
} else if (pwd == "" || pwd == null) {
alert("請輸入密碼");
loginForm.pwd.focus();
return false;
}
return true;
}
</script>
</html>
check_login.jsp代碼為
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/testapp?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8";
String username = "root";
String password = "123456";
conn = DriverManager.getConnection(url, username, password);
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
String sql = "SELECT *FROM userinfo WHERE user ='" + name + "'AND password = '" + pwd + "'";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if (rs.next()) {
response.sendRedirect("./login_success.jsp");
}else{
response.sendRedirect("./login.jsp");
}
%>
login_success.jsp的代碼是
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>日暮黃昏</title>
</head>
<body>
<a href="https://bbs.csdn.net/topics/movie/index.html" target="_blank">movie</a>
<p></p>
<a href="https://bbs.csdn.net/topics/jpg/index.html" target="_blank">jpg</a>
<p></p>
<a href="https://bbs.csdn.net/topics/txt/index.html" target="_blank">txt</a>
<p></p>
</body>
</html>
uj5u.com熱心網友回復:
說明一下,本人沒學過java或者java scrip編程,學過一些c語言,根據經驗修改網上給的代碼,但是網上關于session的用法,只有使用的部分,它的前后關系不清楚,所以請大神幫忙指點一下,在我的實體中如何實作防止繞過登錄驗證的功能。uj5u.com熱心網友回復:
過濾器,放過 login.jsp,check-login.jsp, check-login.jsp 中登錄成功后,session中記錄是否已登錄, 其他請求都需要 驗證session中是否標記是否已登錄,未登錄重定向到 loin.jsp,已登錄 放行uj5u.com熱心網友回復:
理論是在網上查到了,甚至還有代碼,但是代碼都不是實體中應用的,或者說我還不知道怎么放在實體中,希望有朋友幫忙具體如何在我的實體中實作。
另外是不是要在資料庫中增加session的內容,如果需要,我可以在mysql操作增加
uj5u.com熱心網友回復:
可以配置一個攔截器處理Interceptorsuj5u.com熱心網友回復:
實際的架構遠比你想的復雜,基本都會用到各種框架,而且所有請求基本都不會直接訪問jsp的,都是先servlet/controller/action再跳轉.校驗是否登錄,過濾器就可以搞定,如何維持會話,那得看你采用的什么方案,大體差不多.
uj5u.com熱心網友回復:
大概意思就是說:1.服務器后臺在用戶登錄成功后,給客戶端發一個字串,并存在服務端這邊.
2.然后客戶端再來請求的時候,必須附帶上這個字串,服務端檢查這個字串是否合法
a.如果不合法,回傳登錄界面;
b.如果合法繼續處理用戶請求.
當然每一步都可以簡單做,也都可以復雜做,通常大家都會用現成的框架或中間件來做,java的不熟悉,但是原理一樣.
uj5u.com熱心網友回復:
在check_login.jsp中往session寫入user的內容,然后在login_success.jsp讀取session中的user內容,如果能夠讀取到則可以訪問,否則跳轉到login.jsp為了方便,你可以寫個攔截器攔截除了login.jsp和check_login.jsp之外的所有請求,判斷session中是否有user,如果有就放行,如果沒有則跳轉到login.jsp
uj5u.com熱心網友回復:
認真學習一下轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/181196.html
標籤:Web 開發
上一篇:怎么弄啊
