2015-06-05 6 views
1

У меня есть простой spring mvc + spring security приложениеSpring безопасности не awares приставки зрения Spring MVC в

Я заявляю, когда пользователь попробовать .../hellohello.jsp страница из /WEB-INF/pages/ пути отображается правильно:

@RequestMapping(value = "/hello") 
public ModelAndView doLogin() { 
    return new ModelAndView("hello"); 
} 

dispatcher-servlet.xml:

<mvc:annotation-driven/> 

<context:component-scan base-package="com"/> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/pages/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

И теперь я объявляю весной о безопасности, когда пользователь хочет .../hello i t должен быть быть пользователем.

Но когда я попробую http://localhost:8080/hello/, отобразится страница hello.jsp с отключением принудительной аутентификации.

Когда я попробую http://localhost:8080/pages/hello.jsp, он перенаправляет меня на страницу login, но почему весна безопасности не замечает prefix path весны mvc?

UPDATE

security-config.xml

<security:http auto-config="true" use-expressions="true"> 
    <security:intercept-url pattern="/pages/hello.jsp" access="hasRole('ROLE_USER')"/> 
</security:http> 

<security:authentication-manager> 
    <security:authentication-provider> 
     <security:user-service> 
      <security:user name="sajjad" authorities="ROLE_USER" password="200200"/> 
     </security:user-service> 
    </security:authentication-provider> 
</security:authentication-manager> 

Когда я использую pattern="/hello" и пользователь пытается http://localhost:8080/hello/ пользователя не перенаправляет на login страницы.

ответ

0

Попробуйте изменить это от

<security:intercept-url pattern="/pages/hello.jsp" access="hasRole('ROLE_USER')"/> 

в

<security:intercept-url pattern="/pages/hello*" access="hasRole('ROLE_USER')"/> 

В конфигурации перехватывают вы специально попросили проверить только hello.jsp и не здороваются. Spring Security не будет автоматически изменять логику на основе вашего распознавателя.

+0

Это не сработало для меня. – CVV

+0

Поскольку браузер автоматически добавляет дополнительную '/' в конце URL-адреса, я добавляю '/' и конец шаблона и удаляю '/ pages /' из url. – CVV

1

Я изменил intercept-url pattern на pattern="/hello/", и он работает.

Смежные вопросы