spring security tiles страница thymeleaf не найдена 404

#java #spring-mvc #spring-security #tiles #thymeleaf

#java #spring-mvc #spring-безопасность #плитки #thymeleaf

Вопрос:

я настроил spring mvc, а thymeleaf и tiles работают нормально, теперь я пытаюсь интегрировать с ними spring security

но проблема в следующем:
1. когда приложение запускается на странице входа в систему и вводит имя пользователя и пароль, ответа нет (т.е. Оно никогда не вызывает контроллер (я использовал System.out.println("calling"); , но ничего не печатал внутри метода входа)
2. Когда я пытаюсь получить доступ к другой странице, она перенаправляет на страницу входа, но не может ее найти и выдает 404 not found

может ли какой-либо орган указать, где я ошибаюсь в своей конфигурации?

Spring-сервлет

 <mvc:annotation-driven />
    <context:annotation-config />
    <context:component-scan base-package="org.gaca.gms.controllers" />

    <bean id="templateResolver" 
                class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
                <property name="prefix" value="/WEB-INF/" />
                <property name="suffix" value=".html" />
                <property name="characterEncoding" value="UTF-8" />
                <property name="templateMode" value="HTML5" />
    </bean>

        <bean id="tilesConfigurer" 
                class="org.thymeleaf.extras.tiles2.spring4.web.configurer.ThymeleafTilesConfigurer">
                <property name="definitions">
                        <list>
                                <value>/WEB-INF/tiles-defs.xml</value>
                        </list>
                </property>
        </bean>

        <bean id="tilesViewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
                <property name="viewClass" 
                        value="org.thymeleaf.extras.tiles2.spring4.web.view.ThymeleafTilesView" />
                <property name="templateEngine" ref="templateEngine" />
                <property name="characterEncoding" value="UTF-8" />
                <property name="order" value="1" />
                <property name="viewNames" value="templates/*,pages/*,redirect*,loginView" />
        </bean> 
        <bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
                <property name="templateResolver" ref="templateResolver" />
                <property name="additionalDialects">
                        <set>
                                <bean class="org.thymeleaf.extras.tiles2.dialect.TilesDialect" />
                                 <bean class="org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect"/>
                        </set>
                </property>
        </bean>

    <bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:messages" />
        <property name="defaultEncoding" value="UTF-8" />
    </bean>
    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
        p:location="/WEB-INF/jdbc.properties" />

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close" p:driverClassName="${jdbc.driverClassName}"
        p:url="${jdbc.databaseurl}" />


    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
        </property>

        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${jdbc.dialect}</prop>
                <prop key="hibernate.show_sql">true</prop>
                <!-- <prop key="hibernate.hbm2ddl.auto">create</prop> -->
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.connection.useUnicode">true</prop>
                <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
                <prop key="hibernate.connection.charSet">UTF-8</prop>
            </props>
        </property>
    </bean>

    <bean id="usersService" class="org.gaca.gms.services.GenericServiceImpl"></bean>
    <!-- <bean id="loginService" class="org.gaca.gms.services.GenericServiceImpl"></bean> -->
    <bean id="genericDAO" class="org.gaca.gms.dao.GenericDAOImpl"></bean>
    <bean id="loginController"
    class="org.springframework.web.servlet.mvc.ParameterizableViewController">
    <property name="viewName" value="loginView" />
   </bean>
    <tx:annotation-driven />
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
  

Tiles-defs

 <tiles-definitions>
    <definition name="layout" template="templates/layout" templateType="thymeleaf">
        <put-attribute name="header"   value="templates/header" type="thymeleaf" />
        <put-attribute name="menu"   value="templates/menu" type="thymeleaf" />
        <put-attribute name="footer" value="templates/footer"  type="thymeleaf"/>
        <put-attribute name="body" />

    </definition>
    <definition name="loginView" extends="layout">
        <put-attribute name="body"   value="login.html" type="thymeleaf" />
    </definition>
    <definition name="pages/usersView" extends="layout">
        <put-attribute name="body"   value="pages/users" type="thymeleaf" />
    </definition>
     <definition name="pages/sendView" extends="layout">
        <put-attribute name="body"   value="pages/sendMessage" type="thymeleaf" />
    </definition>
</tiles-definitions>
  

Spring-Безопасность

  <global-method-security pre-post-annotations="enabled" />

      <http pattern="/loginView" security="none"/>

    <http use-expressions="true">
        <intercept-url pattern="/resources/**" access="permitAll" />
        <intercept-url pattern="/templates/**" access="permitAll" />
        <intercept-url pattern="/pages/**" access="hasAuthority('User')" />
        <intercept-url pattern="/pages/admin/**" access="hasRole('Admin')"/>

          <form-login login-page="/loginView" authentication-failure-url="/loginView" default-target-url="/pages/usersView" always-use-default-target='true'/>

        <remember-me />
  </http>

    <authentication-manager>
        <authentication-provider>
            <user-service>
              <user name="admin" password="123" authorities="Admin,User" />
              <user name="user" password="111" authorities="User" />
             </user-service>
        </authentication-provider>
    </authentication-manager>
  

LoginController

 @RequestMapping("/spring_security_login")
    public String login() {
        System.out.println("calling login");
        return "loginView";
    }

   // Login form with error
    @RequestMapping("/spring_security_login")
    public String loginError(Model model) {
        model.addAttribute("loginError", true);
        return "loginView";
    }
  

Страница входа в систему

 <!DOCTYPE html>
<div xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
  <div sec:authentication="name"/> 

        <h1>Login page</h1>
        <p th:if="${loginError}">Wrong user or password</p>
        <form th:action="@{/j_spring_security_check}" method="post">
            <label for="j_username">Username</label>:
            <input type="text" id="j_username" name="j_username" /> <br />
            <label for="j_password">Password</label>:
            <input type="password" id="j_password" name="j_password" /> <br />
            <input type="submit" value="Log in" />
        </form>
</div>
  

Комментарии:

1. Из вашей настройки Spring Security похоже, что вы используете /loginView страницу входа в систему, но ваш контроллер определяет /spring_security_login . Разве они не должны совпадать?

2. @CodeChimp я попробовал это, как и прокомментировал, но ничего не изменилось

3. Можете ли вы поместить распечатки в свой контроллер, чтобы узнать, заходит ли он так далеко? Я думаю, вы обнаружите, что это не так.

4. @CodeChimp да, я сделал так, как сказал в своем вопросе, он не вызывает контроллер

5. В этом примере у них есть только один <html> тег, а разрешения установлены на permitAll : howtodoinjava.com/2014/02/15 /…