Почему я не могу войти, используя Realm и JDBC? - PullRequest
0 голосов
/ 23 октября 2018

привет Можете ли вы помочь мне, пожалуйста ... Я хочу использовать метод проверки формы, используя Realm, но когда я устанавливаю все, что я не могу войти ... это сводит меня с ума ...: (

это мой xml-код:

<login-config>
<auth-method>FORM</auth-method>
<realm-name>org.apache.catalina.realm.JDBCRealm</realm-name>
<form-login-config>
    <form-login-page>/Login.jsp</form-login-page>
    <form-error-page>/Erooooring.jsp</form-error-page>
</form-login-config>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>gav</web-resource-name>
        <url-pattern>/teacher/*</url-pattern>
    </web-resource-collection>

    <auth-constraint>
        <role-name>teacher</role-name>
    </auth-constraint>
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>khar</web-resource-name>
        <url-pattern>/student/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>student</role-name>
    </auth-constraint>
</security-constraint>

<security-role>
    <role-name>teacher</role-name>
</security-role>

<security-role>
    <role-name>student</role-name>
</security-role>

и это мой логин html-код:

<body>
<div class="login">
<h1>Login</h1>
<form action="Login" method="post" onsubmit="return AccessValidator()">
<input type="text" name="userid" id="id" placeholder="Username" size="20">
  <label style="color: red;background: black;" for="id" id="label1"></label>
<input type="password" name="userpassword" placeholder="Password" id="password" size="20">
  <label style="color: red;background: black;" for="password" id="label2"></label>

  <button type="submit" class="btn btn-primary btn-block btn-large" onclick="AccessValidator()">Let me in.</button>
</form>
</div>
<% if (request.getAttribute("error")==null) ;
else { out.print("<h1 style=\"margin-left: 35%;color: #670d10\">Invalid    Username OR Password</h1>"); }
%>

<script language="JavaScript" src="Validator.js"></script>
</body>

И это мойкод сервлета:

@WebServlet("/Login")
public class Login extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse    response) throws IOException, ServletException {


    String id = request.getParameter("userid");
    String password = request.getParameter("userpassword");
    System.out.println(id);
    System.out.println(password);

    System.out.println(request.getRemoteUser());
    try {
        System.out.println("inside try ");
        request.login(id,password);
        System.out.println("Loged in");

        GenericPrincipal genericPrincipal = (GenericPrincipal)    request.getUserPrincipal();
        String rolename = genericPrincipal.getRoles()[0];
        System.out.println(rolename);


     } catch (Exception E) {

        System.out.println(E);

      }
  }
 }

А это мой код Царства внутри сервера, внутри конфигурации tomcat:

<Realm className="org.apache.catalina.realm.LockOutRealm">
    <!-- This Realm uses the UserDatabase configured in the global JNDI
         resources under the key "UserDatabase".  Any edits
         that are performed against this UserDatabase are immediately
         available for use by the Realm.  -->
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
           resourceName="UserDatabase"/>


   <Realm
     className="org.apache.catalina.realm.JDBCRealm" 
     driverName="oracle.jdbc.driver.OracleDriver"
     connectionURL="jdbc:oracle:thin:@localhost:1521:orcl"
       connectionName="khanloo"
       connectionPassword="myjava123"
       userTable="newusers"
       userNameCo1="username"
       userCredCo1="password"
       userRoleTable="newroles"
       roleNameCo1="rolename"
   />

   </Realm>

А внутри моей базы данных у меня есть 2 таблицы 1 - newusers с именем пользователя и паролем 2это newroles с именем пользователя и роленым именем

У меня есть в таблице 1 имя пользователя saeed, пароль khanloo и в таблице 2 имя пользователя saeed, rolename teacher

, но когда я перехожу на keaned sahed, он неработать, и это мой вывод:

saeed
khanloo
null
inside try 
javax.servlet.ServletException: Login failed

, и это является stacktrace:

at org.apache.catalina.connector.Request.login(Request.java:2699)
at org.apache.catalina.connector.RequestFacade.login(RequestFacade.java:1087)
at projeSabteNamUni.Login.service(Login.java:36)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:417)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)

это явно получить исключение в request.login, но я установил все правильно ,,,Кто-нибудь может увидеть, где проблема? В XML или файл сервера?

...