2016-11-15 1 views
0

自動生成されたログイン認証フィルタを追加する前に出力を与えるSpring MVCプロジェクトがあります。しかし、フィルタを追加した後、出力が得られません。 404エラーが見つかりませんでした。私のコードの問題は何ですか?実際には、URLが/ booksの場合は、この認証を追加します。以下は私のプロジェクトの関連ファイルです。春のセキュリティのための春MVCで自動生成されたログイン認証が動作していません

web.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" version="2.5"> 
<servlet> 
    <servlet-name>SpringMVC</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>SpringMVC</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 


<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/securityconfig.xml</param-value> 
</context-param> 

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springFramework.web.filter.DelegationFilterProxy</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

securityconfig.xml

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

<sec:http auto-config="true" use-expressions="true"> 
    <sec:intercept-url pattern="/books" access="ROLE_USER"/> 
    <sec:form-login/> 
    <sec:logout logout-url="/j_security_logout"/> 
</sec:http> 

<sec:authentication-manager> 
    <sec:authentication-provider> 
     <sec:user-service> 
      <sec:user name="test" password="123" authorities="ROLE_USER, ROLE_ADMIN"/> 
      <sec:user name="bob" password="mypassword" authorities="ROLE_USER"/> 
     </sec:user-service> 
    </sec:authentication-provider> 
</sec:authentication-manager> 

依存性:

<dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>4.1.0.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-taglibs</artifactId> 
     <version>4.1.0.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>4.1.0.RELEASE</version> 
    </dependency> 
    <!-- security also needs the following to be present --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>4.1.6.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>4.1.6.RELEASE</version> 
    </dependency> 
コントローラのようにある

帳:

@Controller 
public class BookController { 

    @RequestMapping("/") 
    public String redirectRoot() { 
     return "redirect:/books"; 
    } 

    @RequestMapping(value = "/books", method = RequestMethod.GET) 
    public String getAll(Model model) { 
     model.addAttribute("books", bookDao.getAll()); 
     return "bookList"; 
    } 
} 
+0

セキュリティログインページはどうなっていますか?あなたはそれのための任意のコントローラがありますか? – jlumietu

+0

いいえ、私はログインコントローラが不要だと思います。私は正しい? –

+0

あなたは自動生成されたログインフォームを使用しています。私の答えをチェックしてみてください – jlumietu

答えて

0

は次のように試してみてください。 use-expressionsをtrueに設定しているため、要求された役割をアクセス属性にそのまま追加することはできません。

<sec:http auto-config="true" use-expressions="true"> 
    <sec:intercept-url pattern="/books" access="hasRole('ROLE_USER')"/> 
    <sec:form-login/> 
    <sec:logout logout-url="/j_security_logout"/> 
</sec:http> 
関連する問題