ฉันเรียนรู้ JSP มาเป็นเวลานาน และฉันได้ทำงานในโปรเจ็กต์เจ็ดหรือแปดโปรเจ็กต์ แต่ในทุกโปรเจ็กต์ เมื่อผู้ใช้เข้าสู่ระบบ ผู้ใช้จะข้ามไปยังเพจที่เขาหรือเธอได้รับอนุญาตหรือแสดงโดยตรง ลิงก์ไปยังหน้าที่สามารถเข้าถึงได้ ใช้วิธีนี้เพื่อควบคุมการเข้าถึงอย่างไร้เดียงสา ฉันไม่เคยคิดเลยว่าหากฉันไม่ได้เข้าสู่ระบบ ฉันจะสามารถเข้าถึงหน้าของผู้ใช้ได้โดยตรงโดยการป้อนที่อยู่
การควบคุมสิทธิ์ใน jsp ทำได้ผ่าน Filter กรอบการพัฒนาทั้งหมดมี Filter รวมอยู่ด้วย หากกรอบการพัฒนาไม่สามารถใช้งานได้ วิธีการนำไปใช้งานต่อไปนี้:
LoginFilter.java
คัดลอกรหัสรหัส ดังต่อไปนี้:
LoginFilter ระดับสาธารณะใช้ตัวกรอง {
สตริงส่วนตัว allowanceUrls[] = null;
สตริงส่วนตัว gotoUrl = null;
โมฆะสาธารณะทำลาย () {
// TODO ต้นขั้ววิธีการสร้างอัตโนมัติ
ใบอนุญาต URL = null;
gotoUrl = โมฆะ;
-
โมฆะสาธารณะ doFilter (คำขอ ServletRequest, การตอบสนอง ServletResponse,
สายโซ่ FilterChain) พ่น IOException, ServletException {
// TODO ต้นขั้ววิธีการสร้างอัตโนมัติ
HttpServletRequest res=(HttpServletRequest) คำขอ;
HttpServletResponse resp = (HttpServletResponse) ตอบกลับ;
ถ้า(!isPermitUrl(คำขอ)){
ถ้า (filterCurrUrl (คำขอ)) {
System.out.println("--->กรุณาเข้าสู่ระบบ");
resp.sendRedirect(res.getContextPath()+gotoUrl);
กลับ;
-
-
System.out.println("--->อนุญาตการเข้าถึง");
chain.doFilter (คำขอ, ตอบกลับ);
-
ตัวกรองบูลีนสาธารณะCurrUrl (คำขอ ServletRequest) {
ตัวกรองบูลีน = false;
HttpServletRequest res=(HttpServletRequest) คำขอ;
ผู้ใช้ ผู้ใช้ =(ผู้ใช้) res.getSession().getAttribute("ผู้ใช้");
ถ้า (null== ผู้ใช้)
ตัวกรอง=จริง;
ตัวกรองส่งคืน;
-
บูลีนสาธารณะ isPermitUrl (คำขอ ServletRequest) {
isPermit บูลีน = เท็จ;
สตริง currentUrl = currentUrl (คำขอ);
ถ้า (permitUrls != null && allowanceUrls.length > 0) {
สำหรับ (int i = 0; i < allowanceUrls.length; i ++) {
ถ้า (permitUrls [i] .equals (currentUrl)) {
isPermit = จริง;
หยุดพัก;
-
-
-
ผลตอบแทนคือใบอนุญาต;
-
//ขอที่อยู่
สตริงสาธารณะ currentUrl (คำขอ ServletRequest) {
HttpServletRequest res = (HttpServletRequest) คำขอ;
งานสตริง = request.getParameter("task");
เส้นทางสตริง = res.getContextPath();
สตริง uri = res.getRequestURI();
if (task != null) {//uri รูปแบบ xx/ser
uri = uri.substring(path.length(), uri.length()) + "?" + "งาน = "
+ งาน;
} อื่น {
uri = uri.substring(path.length(), uri.length());
-
System.out.println("ที่อยู่คำขอปัจจุบัน:" + uri);
กลับยูริ;
-
โมฆะสาธารณะ init (FilterConfig filterConfig) พ่น ServletException {
// TODO ต้นขั้ววิธีการสร้างอัตโนมัติ
สตริง allowanceUrls = filterConfig.getInitParameter("permitUrls");
สตริง gotoUrl = filterConfig.getInitParameter("gotoUrl");
this.gotoUrl = gotoUrl;
ถ้า (permitUrls != null && allowanceUrls.length() > 0) {
this.permitUrls = allowanceUrls.split (");
-
-
-
เว็บ.xml
คัดลอกรหัสรหัส ดังต่อไปนี้:
<ตัวกรอง>
<ตัวกรองชื่อ>loginFilter</ตัวกรองชื่อ>
<กรองคลาส>filter.LoginFilter</กรองคลาส>
<init-พารามิเตอร์>
<param-name>ละเว้น</param-name>
<param-value>เท็จ</param-value>
</init-พารามิเตอร์>
<init-พารามิเตอร์>
<param-name>permitUrls</param-name>
<param-value>/,/servlet/Loginservlet?task=login,/public.jsp,/login.jsp</param-value>
</init-พารามิเตอร์>
<init-พารามิเตอร์>
<param-name>gotoUrl</param-name>
<param-value>/login.jsp</param-value>
</init-พารามิเตอร์>
</ตัวกรอง>
<การแมปตัวกรอง>
<ตัวกรองชื่อ>loginFilter</ตัวกรองชื่อ>
<url-รูปแบบ>/*</url-รูปแบบ>
</การแมปตัวกรอง>
รหัสสั้นนี้ใช้การกรองการเข้าสู่ระบบของผู้ใช้เป็นหลัก และหลักการกรองสิทธิ์จะเหมือนกัน เพียงเปลี่ยนการตัดสินว่าผู้ใช้เข้าสู่ระบบว่าเขาหรือเธอได้รับอนุญาตหรือไม่!