Mechanizm Autoryzacji Glassfish

0

Gdy korzystam z formularza autoryzującego i wpiszę poprawne dane, zostaję przeniesiony do głównej strony(index.jsp). Zależy mi, abym został przeniesiony do strony git.html.
Natomiast gdy nie jestem zalogowany i wpiszę git.html, działa mechanizm autoryzacji i po wpisaniu poprawnych danych zostaję przeniesiony do strony git.html

btw. Uzywam glassfish 4.1, netbeans 8.0.2, JAAS Context: fileRealm.

web.xml

 
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <login-config>
    <auth-method>FORM</auth-method>
    <realm-name>stronaretail</realm-name>
    <form-login-config>
        <form-login-page>/testlog.jsp</form-login-page>
        <form-error-page>/err.jsp</form-error-page>
    </form-login-config>
    </login-config>
    <security-constraint>
    <web-resource-collection>
        <web-resource-name>Authorization Mechanism</web-resource-name>
        <url-pattern>/git.html</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>administrator</role-name>
    </auth-constraint>
    </security-constraint>
</web-app>

glassfish-xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
  <class-loader delegate="true"/>
    <security-role-mapping>
        <role-name>administrator</role-name>
        <group-name>admin</group-name>
    </security-role-mapping>
</glassfish-web-app>
0

Domyślam się, że wywołujesz manualnie formularz z akcją j_security_check, ale raczej nie tędy droga. Możesz zrobić drugi formularz i wykonać metodę HttpServletRequest#login, a potem przekierować użytkownika.

0

Domyślam sie ze trzeba w servlecie zrobić getParameter j_username oraz j_password. I co dalej??

0

Miałem na myśli to, żeby obok strony testlog.jsp z formularzem "j_security_check" zrobić drugi formularz logowania (na stronie głównej). Mogą być błędy:

<form action="loginservlet" method=post>
    username: <input type="text" name="loginInputField" />
    <br />
    password: <input type="password" name="passwordInputField" />
    <br />
    <input type="submit" value="Submit">
    <input type="reset" value="Reset">
</form>
@WebServlet("loginservlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String login = request.getParameter("loginInputField");
        String password = request.getParameter("passwordInputField");
        try{
            request.login(login, password);
            response.sendRedirect("/git.jsp");
        }catch( ServletException sex ){
            response.sendRedirect("/niegit.jsp");
        }
    }
}

Co prawda teraz możesz w ogóle wywalić ten z j_security_check, i dać <form-login-page>index.jsp</form-login-page>, ale z drugiej strony na testlog.jsp możesz dać elegancką informację "Próbujesz uzyskać dostęp do chronionego zasobu, proszę się uwierzytelnić" :) Można też wyciąć ten powyższy formularz do osobnego pliku, i wkleić go zarówno na stronie głównej jak i testlog.jsp

1 użytkowników online, w tym zalogowanych: 0, gości: 1