Предварительный вход Websphere в j_security_check

Я использую Websphere с j_security_check, и у меня есть рабочий фильтр входа в систему с настройками CONFIDENTIAL и SSL. Из-за некоторых сложных требований мне нужно обработать переменную j_username перед выполнением j_security_check.

Из одного из ответов, найденных здесь, было сказано, что этот предварительный вход обработка невозможна. Однако я заметил, что предыдущий спрашивающий использовал Tomcat, а я использую Websphere. Я обнаружил, что для моей проблемы есть решение здесь, но кажется, что каждый раз, когда я пытаюсь войти, я получаю сообщение "Веб-сайт не может отобразить страницу. На веб-сайте возникла ошибка программирования". ."

Я попытался устранить неполадки, проверив правильность синтаксиса. Обнаружил некоторые несоответствия вроде и исправил их, как смог. Тем не менее, я все еще продолжаю получать ту же ошибку.

Может ли кто-нибудь бросить меня в правильном направлении? Я могу предоставить дополнительную информацию, но они в основном похожи на вторую ссылку. Единственная защищенная папка находится в \protected\, а сервлет .java находится в \WEB-INF\classes.

Спасибо.


person Em Cee    schedule 12.04.2012    source источник
comment
Есть ли в информационном центре WAS 7.0 конкретная ссылка, на которую можно указать вместо домашней страницы по умолчанию для информационного центра? Кроме того, что это за сложное требование, которое требует доступа к j_security_check. Поможет ли использование некоторых javascripts?   -  person Manglu    schedule 13.04.2012
comment
Здесь отредактирована ссылка. К сожалению. Я зашел на их справочную страницу и начал поиск оттуда. Я отредактировал его, как указано выше. Я основывал свой код на этой странице, хотя обнаружил некоторую синтаксическую ошибку, такую ​​как ‹filter id=Filter_1›, оканчивающуюся на ‹/filter-id›, что заставляет меня поверить, что коды страницы не так надежны, как может показаться.   -  person Em Cee    schedule 13.04.2012
comment
Существует досадное требование шифровать пароль, отправляемый от клиента к серверу, несмотря на HTTPS и SSL. Они хотели бы иметь простой текстовый пароль, хранящийся в AD, сохраняя при этом, что канал и данные зашифрованы. Два метода, которые я думаю попробовать. Первое означает, что я должен зашифровать пароль на стороне клиента, отправить его на сервер, расшифровать на стороне сервера перед сравнением с AD. Другой метод заключается в хешировании пароля на стороне клиента, отправке его на сервер, после чего сервер извлекает пароль из AD и хэширует его перед сравнением двух.   -  person Em Cee    schedule 13.04.2012
comment
Просто обновление. Я проверил журналы ошибок и понял, что использовал LoginFilter.java вместо LoginFilter.class, что означает, что теперь мне нужно попытаться выяснить, как скомпилировать его с помощью javac в файл класса.   -  person Em Cee    schedule 13.04.2012


Ответы (1)


Если кому интересно, вот результаты:

Для \WEB-INF\web.xml

<filter id="Filter_1">
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.myloginfilter.MyLoginFilter</filter-class>
    <description>Performs pre-login operation</description>
</filter>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/j_security_check</url-pattern>
</filter-mapping>

Для \WEB-INF\classes\com\myloginfilter\MyLoginFilter.class

    public class MyLoginFilter implements Filter {

    protected FilterConfig filterConfig;

    public void init(FilterConfig filterConfig) throws ServletException {
       this.filterConfig = filterConfig;
    }

    public void destroy() {
       this.filterConfig = null;
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException {
        chain.doFilter(new MyRequestWrapper((HttpServletRequest) request), response);
    }

    public static class MyRequestWrapper extends HttpServletRequestWrapper {

        public MyRequestWrapper(HttpServletRequest request) {
            super(request);
        }

        @Override
        public String getParameter(String name) {
            String username= getRequest().getParameter("j_username");

            if ("j_password".equals(name) && "admin".equals(username)) {
                username = "administrator";
                return username;
            }
            return super.getParameter(name);
        }
    }
}

Чтобы скомпилировать его, используйте Javac с командой:

javac -cp servlet-api-2.3.jar MyLoginFilter.class
person Em Cee    schedule 26.04.2012
comment
Это действительно работает? Обычно j_security_check выполняется до выполнения фильтров. - person Mike Braun; 28.04.2013
comment
Да, по крайней мере, для Tomcat и WebSphere. - person Em Cee; 10.05.2013