У нас есть аутентификация для входа в веб-форму с j_securtiy_check
. Мы хотели бы изменить его с помощью программной аутентификации при входе. Каков правильный способ аутентификации сервлетом имени пользователя и пароля, переданных ему? Сервлет явно незащищен.
Мы экспериментировали с этой областью server.xml:
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="UserDatabase"
userTable="app_user" userNameCol="login_name" userCredCol="password_value"
userRoleTable="user_perm" roleNameCol="permission_name"
allRolesMode="authOnly" digest="MD5"
/>
Причина этого в том, что у нас есть клиент java webstart, который отправляет информацию для входа в незащищенный loginServlet. Этот сервлет в настоящее время аутентифицируется в службе единого входа JOSSO, но я хочу удалить это и использовать для начала простую аутентификацию tomcat7. Затем в конечном итоге перейти на OpenAM. Если бы я мог программно сгенерировать значение JSSESSIONIDSSO и поместить его в файл cookie.
Это какой-то код, который я нашел. Это правильный способ вызвать аутентификацию?
ApplicationContextFacade acf = (ApplicationContextFacade) this.getServletContext();
Field privateField = ApplicationContextFacade.class.getDeclaredField("context");
privateField.setAccessible(true);
ApplicationContext appContext = (ApplicationContext) privateField.get(acf);
Field privateField2 = ApplicationContext.class.getDeclaredField("context");
privateField2.setAccessible(true);
StandardContext stdContext = (StandardContext) privateField2.get(appContext);
Realm realm = stdContext.getRealm();
Principal principal = realm.authenticate(loginBean.getUsername(), loginBean.getPassword());
if (principal == null)
{
return 0;
}
GenericPrincipal genericPrincipal = (GenericPrincipal) principal;
System.out.println ("genericPrincipal=" + genericPrincipal.toString());