JDBC领域登录页面
我试图使用JDBC领域创建一个登录页面,但没有用。
我的步骤:
- 创建数据库,用户和组表
- 创建连接池和数据源,自定义领域。
- 添加安全角色映射,登录约束,安全约束和安全角色。
- 创建登录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
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_username
和j_password
。
另请参阅Matt Handy的回答和评论,并提供更多详细信息(例如错误消息等)。 如果你只是说“它不起作用”,那么很难提供帮助
配置jdbc领域有点棘手。 您在问题中提供了大量信息,但您错过了描述错误行为的信息。
一些想法:
你有一个组表,但它包含行(peterwkc,用户)?
你存储了密码的哈希值吗?
您的JDBC领域配置如何?
如果您将安全模块的日志记录设置为最佳,那么server.log中的内容是什么?
检查一下,因为我已经解析性地回答了你的问题(可能会出现小错误):
JDBC领域表单身份validation如何