Как настроить JASSRealm с аутентификацией Tomcat в Windows - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь настроить пользовательский JAASRealm с аутентификацией tomcat для моего нового проекта. Кажется, аутентификация buttomcat (j_security_check) не распознает имя пользователя и пароль из класса loginModule.

Я пытался:

добавление классов java в файл jar и добавление этого в папку lib tomcat.

добавление:

set CATALINA_OPTS = -Djava.security.auth.login.config=% CATALINA_HOME% / conf / jaas.config

и

set JAVA_OPTS =% JAVA_OPTS% -Djava.security.auth.login.config ==% CATALINA_BASE% / conf / jaas.config

в файл startup.bat после ": okHome" и в catalina.bat после ": end"

jaas.config:

BytesLoungeLogin {
    com.byteslounge.jaas.BytesLoungeLoginModule required debug=true;
};



context.xml:


<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Realm className="org.apache.catalina.realm.JAASRealm" appName="BytesLoungeLogin"
        userClassNames="com.byteslounge.jaas.UserPrincipal" roleClassNames="com.byteslounge.jaas.RolePrincipal" />
</Context>

Web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">

    <display-name>Tomcat JAAS example</display-name>

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Admin</web-resource-name>
            <url-pattern>/admin/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

    <security-role>
        <role-name>admin</role-name>
    </security-role>

    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login.html</form-login-page>
            <form-error-page>/error.html</form-error-page>
        </form-login-config>
    </login-config>

</web-app>

BytesLoungeLoginModule.java snippet:

public class BytesLoungeLoginModule implements LoginModule {

    private CallbackHandler handler;
    private Subject subject;
    private UserPrincipal userPrincipal;
    private RolePrincipal rolePrincipal;
    private String login;
    private List<String> userGroups;

    @Override
    public void initialize(Subject subject, CallbackHandler callbackHandler,
            Map<String, ?> sharedState, Map<String, ?> options) {

        handler = callbackHandler;
        this.subject = subject;
    }

    @Override
    public boolean login() throws LoginException {

        Callback[] callbacks = new Callback[2];
        callbacks[0] = new NameCallback("login");
        callbacks[1] = new PasswordCallback("password", true);

        try {
            handler.handle(callbacks);
            String name = ((NameCallback) callbacks[0]).getName();
            String password = String.valueOf(((PasswordCallback) callbacks[1])
                    .getPassword());

            // Here we validate the credentials against some
            // authentication/authorization provider.
            // It can be a Database, an external LDAP, a Web Service, etc.
            // For this tutorial we are just checking if user is "user123" and
            // password is "pass123"
            if (name != null && name.equals("user123") && password != null
                    && password.equals("pass123")) {
                login = name;
                userGroups = new ArrayList<String>();
                userGroups.add("admin");
                return true;
            }

            // If credentials are NOT OK we throw a LoginException
            throw new LoginException("Authentication failed");

        } catch (IOException e) {
            throw new LoginException(e.getMessage());
        } catch (UnsupportedCallbackException e) {
            throw new LoginException(e.getMessage());
        }

    }

это простой пример программы, которую я скачал, чтобы проверить, работает ли JAASRealm, ноэто всегда заканчивается как неудачный вход в систему.

Я использую Windows 8.1, Tomcat 8.5, JDK1.8.0_211, jre1.8.0_211 и я не использую какую-либо IDE.

...