1

この単純な AdminController を作成しました。

@Controller
@RequestMapping("admin")
public class AdminController {
    @PreAuthorize("hasAuthority('ROLE_ADMIN')")
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public @ResponseBody String welcomeAdmin() {
        return "Spring Security - ROLE_ADMIN";
    }   
    @PreAuthorize("hasAuthority('ROLE_ADMIN')")
    @RequestMapping(value = "/{query}", method = RequestMethod.GET)
    public @ResponseBody String welcomeAdmin(@PathVariable String query) {
        return query;
    }
}

これはsecurity-context.xmlです:

<http auto-config="true">
    <intercept-url pattern="/admin*" access="ROLE_ADMIN"/>
    <logout logout-success-url="/admin" />
</http>

<authentication-manager>
    <authentication-provider>
        <user-service>
            <user name="user" password="password" authorities="ROLE_USER" />
            <user name="admin" password="password" authorities="ROLE_ADMIN" />
        </user-service>
    </authentication-provider>
</authentication-manager>

ここでweb.xmlにロードされます:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring/root-context.xml
        /WEB-INF/spring/appServlet/security-context.xml
    </param-value>
</context-param>
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

エラーはありませんが、/adminリソースには誰でもアクセスできます。リソースが Spring セキュリティによってフィルタリングされていないのはなぜですか?

4

2 に答える 2

3

のせいだと思います

<logout logout-success-url="/admin" />

その行によると、ユーザーがログアウトすると、そのURLが表示されます。ログアウトページは、認証されていないユーザーがアクセスできる必要があるため、安全ではありません。最初の条件を上書きしている可能性があります。

于 2012-07-30T19:57:57.890 に答える
1

どのバージョンの春のセキュリティを使用していますか?

security-context.xmlで必要な

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

注釈を使用するため。

また、試してみてください:

<intercept-url pattern="/admin*" access="hasRole('ROLE_ADMIN')"/>
于 2012-07-31T17:57:16.337 に答える