JDBC领域登录页面

我试图使用JDBC领域创建一个登录页面,但没有用。

我的步骤:

  1. 创建数据库,用户和组表
  2. 创建连接池和数据源,自定义领域。
  3. 添加安全角色映射,登录约束,安全约束和安全角色。
  4. 创建登录jsp和登录servlet

我可以在创建期间ping连接池。

执行上述任务所需的最小配置是什么?

我的代码:

create table login ( username varchar(128) NOT NULL CONSTRAINT usernamePk primary key, password varchar(128) NOT NULL ); insert into Login values('peterwkc', '1234'); create table grouptable ( username varchar(128) NOT NULL, groupid varchar(128) NOT NULL, CONSTRAINT GROUP_PK PRIMARY KEY(username, groupid), CONSTRAINT USER_FK FOREIGN KEY(username) REFERENCES Login (username) ON DELETE CASCADE ON UPDATE RESTRICT ); 

web.xml中

    javax.faces.PROJECT_STAGE Development   Faces Servlet javax.faces.webapp.FacesServlet 1   Faces Servlet /faces/*    30    faces/Login.jsp   LoginConstraint  MyResource  /LoginController    User    FORM Login  /Login.jsp /Error.jsp     User    Admin   

与GlassFish的web.xml

    /JDBC_Realm  User User   Admin peterwkc     Keep a copy of the generated servlet class' java code.    

Login.jsp:

          JSP Page   

Username :

Password :

LoginController.java:

 @WebServlet(name = "LoginController", urlPatterns = {"/LoginController"}) public class LoginController extends HttpServlet { @Override public void init() throws ServletException { getServletConfig(); } @Override public void destroy() { } /** * Processes requests for both HTTP GET and POST methods. * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { /* TODO output your page here out.println(""); out.println(""); out.println("Servlet LoginController"); out.println(""); out.println(""); out.println("

Servlet LoginController at " + request.getContextPath () + "

"); out.println(""); out.println(""); */ } finally { out.close(); } } // /** * Handles the HTTP GET method. * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // processRequest(request, response); PrintWriter out = null; try { response.setContentType("text/html;charset=UTF-8"); out = response.getWriter(); } finally { out.close(); } } /** * Handles the HTTP POST method. * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Returns a short description of the servlet. * @return a String containing servlet description */ @Override public String getServletInfo() { return "Short description"; }// }

我按照本教程。 http://blog.gamatam.com/2009/11/jdbc-realm-setup-with-glassfish-v3.html

问题:1。为什么我的代码不起作用?

请帮忙。 谢谢。

如果你按照教程,Glassfish希望找到密码的MD5哈希值。 但你插入了1234 。 您将要么插入1234的MD5哈希值: 81dc9bdb52d04dc20036dbd8313ed055或者您可以告诉Glassfish使用普通密码,但我不知道在Digest放入什么。

HTH

编辑

在本教程中,领域名称是security但在您的web.xml中,它名为Login

编辑2

还有更多错误:要使用Glassfish的自动登录机制,Login.jsp中的表单应该有action="j_security_check" ,用户名和密码的名称应分别为j_usernamej_password

另请参阅Matt Handy的回答和评论,并提供更多详细信息(例如错误消息等)。 如果你只是说“它不起作用”,那么很难提供帮助

配置jdbc领域有点棘手。 您在问题中提供了大量信息,但您错过了描述错误行为的信息。

一些想法:

你有一个组表,但它包含行(peterwkc,用户)?

你存储了密码的哈希值吗?

您的JDBC领域配置如何?

如果您将安全模块的日志记录设置为最佳,那么server.log中的内容是什么?

检查一下,因为我已经解析性地回答了你的问题(可能会出现小错误):
JDBC领域表单身份validation如何