2016-06-15 88 views
2

LoginServlet.java值越来越插入数据库,但他们不应该

package bean; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 
public class LoginServlet extends HttpServlet { 
    @Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.setContentType("text/html"); 
     try (PrintWriter out = response.getWriter()) { 
      request.getRequestDispatcher("link.html").include(request, response); 


      String name=request.getParameter("name"); 
      String password=request.getParameter("password"); 
      boolean status=false; 
    try{ 
     Connection con=ConnectionProvider.getCon(); 
     String sql="select * from roles where name='" + name + "' and pass='" + password + "'"; 
     PreparedStatement stmt =con.prepareStatement(sql); 
     String role="admin";       
     ResultSet rs=stmt.executeQuery(); 
     if(rs.next()) 
     { 
      status=true; 
      role=rs.getString("role"); 
     } 

     if(status){ 
     out.print("Welcome, "+name); 
     HttpSession session=request.getSession(); 
     session.setAttribute("name",name); 
     if(role!=null && role.equals("admin")){ 
      response.sendRedirect("create.html"); 

     } 
     else { 
      response.sendRedirect("create1.html");   

     } 

    } 
    else{ 
     out.print("Sorry, username or password error!"); 
     request.getRequestDispatcher("login.html").include(request, response); 
    } 
    }catch(SQLException | ServletException | IOException e){} 


     } 
} 
} 

create.html上

<a href="LogoutServlet">Logout</a> 
<a href="department.jsp">Create Department</a> 
<a href="c_user.jsp">Create Users</a> 
<hr/> 

department.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>JSP Page</title> 
</head> 
<body> 
    <h1>Create Department</h1> 
<br> 
<form action="DepartmentServlet"> 
    <table border="1"> 
     <tbody> 
      <tr> 
       <td>Company Name :</td> 
       <td><input type="text" name="company" value="" size="50" /></td> 
      </tr> 
      <tr> 
       <td>Department Name</td> 
       <td><input type="text" name="department" value="" size="50" /> </td> 
      </tr> 
      <tr> 
       <td>Head Office :</td> 
       <td><input type="text" name="place" value="" size="50" /></td> 
      </tr> 

     </tbody> 
    </table> 
    <input type="reset" value="Clear" name="Clear" /> 
    <input type="submit" value="Submit" name="Submit" /> 
</form> 
</body> 
</html> 

DepartmentServlet.java

package bean; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 


public class DepartmentServlet extends HttpServlet { 

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html"); 
    try (PrintWriter out = response.getWriter()) { 
      request.getRequestDispatcher("link.html").include(request, response); 

      HttpSession session=request.getSession(false); 
      if(session!=null){ 
       String name=(String)session.getAttribute("name"); 
       boolean status=false; 
    try{ 
     String department=request.getParameter("department"); 
     String company=request.getParameter("company"); 
     String place=request.getParameter("place"); 

     Connection con=ConnectionProvider.getCon(); 
     String sql="insert into department(departmentname,company,place) values (?,?,?)"; 
     PreparedStatement pstmt =con.prepareStatement(sql); 

     pstmt.setString(1,department); 
     pstmt.setString(2,company); 
     pstmt.setString(3,place); 

     int rs=pstmt.executeUpdate(); 
     if(rs>0){status=true;} 
    }catch(Exception e){} 
       if(status){ 
       out.print("Values have been inserted,"+name); 
       request.getSession();} 
       else 
       { 
        out.print("failed"); 
       }     
       } 
      else{ 
       out.print("Please login first"); 
       request.getRequestDispatcher("login.html").include(request, response); 
      } 
     } 
} 
} 

LogoutServlet.java

package bean; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 
public class LogoutServlet extends HttpServlet { 
      @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.setContentType("text/html"); 
       try (PrintWriter out = response.getWriter()) { 
        request.getRequestDispatcher("link.html").include(request, response); 

        HttpSession session=request.getSession(false); 
        session.invalidate(); 

        out.print("You are successfully logged out!"); 
       } 
} 
} 

随着DepartmentServlet,我将值插入到数据库中。问题是,我能够在没有登录的情况下打开create.htmldepartment.jsp,即使我没有登录,也会将值插入数据库。我知道问题在于会话未正确传递(使用)。我该如何解决它?有人能纠正它吗?

+1

墙的代码问题不是对他人有用的未来,并且通常没有得到很好的答案,而是创建一个[mcve]。 –

+1

'} catch(SQLException | ServletException | IOException e){}'可能很多重要的信息没有在这里打印 –

+0

好吧,但让我等待约24小时,如果我不能得到任何满意的答案我会发布一个新的问题或编辑这一个 –

回答

0

你就必须实现过滤器来限制的.jsp/的.html访问这将检查活动的会话。如果那会没有活动会话发现请求重定向到登录页面(在你的情况下link.Use下面执行doFilter方法的

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) res; 
     HttpSession session = request.getSession(false); 

     if (session == null || session.getAttribute("name") == null) { 
      response.sendRedirect(request.getContextPath() + "/link"); 
     } else { 
      chain.doFilter(req, res); 
     } 
    } 
1

变化的条件if(session != null)
if(session != null && session.getAttribute("name") != null)

+0

谢谢你的作品 –

+0

另一个问题,我可以打开create.html和department.jsp没有登录直接输入url可以检查。 –

+0

@RahulGupta如果有效,请接受答案。 –