Интеграция перехватчика в веб-запросы весной 3.0

В настоящее время я работаю над веб-проектом и использую Spring 3.0 с контроллерами базы аннотаций.

  1. Я пытаюсь использовать перехват для входа в систему.
  2. Никакой URL-адрес не может быть напрямую удален, кроме входа в систему с использованием перехватчика.

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

Делюсь с вами своим servlet.xml

Мне также интересно, почему я должен определять сопоставления URL-адресов, чтобы заставить работать перехватчик, иначе он переходит в неограниченный цикл.

пожалуйста, помогите мне в решении этой проблемы, если у вас есть рабочий пример для этого требования, поделитесь им тоже.

Заранее спасибо.

springmvc-servlet.xml

  <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan
        base-package="com.waqas.app.controller" />

    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>



        <bean id="urlMapping"
        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="urlMap">
            <map>
        <!--  -->   
            <entry key="contacts.htm"><ref bean="contactController" /></entry>
                    <entry key="users.htm"><ref bean="loginController" /></entry>

                            <entry key="hello.htm"><ref bean="helloController" /></entry>


            </map>
        </property>
    </bean>


    <bean name="contactController" class="com.waqas.app.controller.ContactController" />

        <bean name="helloController" class="com.waqas.app.controller.HelloWorldController" />


   <bean name="loginController" class="com.waqas.app.controller.LoginController" />



        <bean id="handlerMapping"
          class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="interceptors">
            <list>
                <ref bean="loginInterceptor"/>
            </list>
        </property>
          <property name="mappings">
            <value>

            *.htm=contactController

            </value>
        </property>

    </bean>



    <bean id="loginInterceptor"
          class="com.waqas.app.interceptor.LoginInterceptor">

    </bean>






</beans>

index.html

<%@ include file="/WEB-INF/jsp/include.jsp" %>
<jsp:forward page="contacts.htm"></jsp:forward>

я также хочу применить этот перехватчик к отдельным URL-адресам/шаблону URL-адресов.

Ждем Вашего ответа.

С уважением, qasibeat


person user1430003    schedule 22.02.2011    source источник
comment
Как насчет использования Spring Security Filters?   -  person Benton999    schedule 22.02.2011


Ответы (2)


Это довольно распространенная проблема. Скотт Мерфи создал хороший плагин Spring, который позволяет указать перехватчик на контроллере на основе URL-адресов. Вы можете загрузить его из springplugins.

См. также Конфигурация перехватчика контроллера на основе аннотаций Spring Framework

EDIT: Для версии 3.1+ см. мой ответ на вопрос Управление доступом к контроллерам для настройки перехватчика на основе по шаблонам URL.

person Ritesh    schedule 22.02.2011

Пример перехватчика монитора производительности. Он регистрируется всякий раз, когда запрос занимает более 2 секунд.

public class PerformanceMonitorHandlerInterceptor implements HandlerInterceptor {

        private static Logger logger = Logger.getLogger( PerformanceMonitorHandlerInterceptor.class );

        /** Default to not active and 2 seconds. */
        private boolean active = true;

        /** The threshold. */
        private long threshold = 2000;

        /**
         * Starts the StopWatch to time request.
         * @param handler the handler
         * @param request the request
         * @param response the response
         * @return true, if pre handle
         * @throws Exception the exception
         * @see org.springframework.web.servlet.HandlerInterceptor#preHandle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse,
         *      java.lang.Object)
         */
        @SuppressWarnings("unused")
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                // Start Watch
                if ( this.active ) {
                        String name = this.createRequestTraceName( request );
                        StopWatch stopWatch = new StopWatch( name );
                        stopWatch.start( name );
                        StopWatchHolder.setStopWatch( stopWatch );
                }

                // Continue with request
                return true;
        }

        /**
         * Warn if method takes longer than threshold milliseconds.
         * @param handler the handler
         * @param request the request
         * @param modelAndView the model and view
         * @param response the response
         * @throws Exception the exception
         * @see org.springframework.web.servlet.HandlerInterceptor#postHandle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse,
         *      java.lang.Object, org.springframework.web.servlet.ModelAndView)
         */
        @SuppressWarnings("unused")
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
                if ( this.active ) {
                        // Stop Watch
                        StopWatch stopWatch = StopWatchHolder.getStopWatch();
                        stopWatch.stop();

                        // Check threshold and log if over
                        if ( stopWatch.getLastTaskTimeMillis() >= this.threshold ) {
                                logger.warn( stopWatch.shortSummary() );
                        }

                        // Set ThreadLocal to null
                        StopWatchHolder.clear();
                }
        }

        /**
         * Not implemented.
         * @param handler the handler
         * @param exception the exception
         * @param request the request
         * @param response the response
         * @throws Exception the exception
         * @see org.springframework.web.servlet.HandlerInterceptor#afterCompletion(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse,
         *      java.lang.Object, java.lang.Exception)
         */
        @SuppressWarnings("unused")
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) throws Exception {
        // not implemented
        }

        /**
         * Creates the request trace name.
         * @param request the request
         * @return trace name
         */
        protected String createRequestTraceName(HttpServletRequest request) {
                StringBuilder sb = new StringBuilder();
                sb.append( "url: [" );
                sb.append( request.getRequestURL() );
                sb.append( "]" );
                sb.append( "  query: [" );
                sb.append( request.getQueryString() );
                sb.append( "]" );
                return sb.toString();
        }

        /**
         * Sets the threshold.
         * @param threshold The threshold to set.
         */
        public void setThreshold(long threshold) {
                this.threshold = threshold;
        }

        /**
         * Sets the active.
         * @param active The active to set.
         */
        public void setActive(boolean active) {
                this.active = active;
        }
}

Затем подключите bean-компонент к сопоставлению URL-адреса имени bean-компонента:

    <bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
            <property name="interceptors">
            <list>
                    <ref bean="performanceMonitorHandlerInterceptor" />
                    </list>
            </property>
    </bean>
person Felipe Oliveira    schedule 22.02.2011