Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring security未筛选资源_Java_Spring_Spring Security - Fatal编程技术网

Java Spring security未筛选资源

Java Spring security未筛选资源,java,spring,spring-security,Java,Spring,Spring Security,我创建了这个简单的AdminController: @Controller @RequestMapping("admin") public class AdminController { @PreAuthorize("hasAuthority('ROLE_ADMIN')") @RequestMapping(value = "/", method = RequestMethod.GET) public @ResponseBody String welcomeAdmin()

我创建了这个简单的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;
    }
}
这是安全上下文。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>
<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>

它被加载到web.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>
<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>

上下文配置位置
/WEB-INF/spring/root-context.xml
/WEB-INF/spring/appServlet/security-context.xml
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*

没有错误,但是任何人都可以访问
/admin
资源,为什么Spring security没有过滤该资源?

我认为这是因为



根据该行,一旦用户注销,就会显示该URL。注销页面不安全,因为未经身份验证的用户必须能够访问该页面。它可能会覆盖第一个条件。

我认为这是因为



根据该行,一旦用户注销,就会显示该URL。注销页面不安全,因为未经身份验证的用户必须能够访问该页面。它可能覆盖了第一个条件。

您使用的是哪个版本的spring security

在您的安全上下文.xml中,您需要

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

以便使用注释

您还应该尝试:

<intercept-url pattern="/admin*" access="hasRole('ROLE_ADMIN')"/>

您使用的是哪个版本的spring security

在您的安全上下文.xml中,您需要

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

以便使用注释

您还应该尝试:

<intercept-url pattern="/admin*" access="hasRole('ROLE_ADMIN')"/>


我已更改为,但仍然可以访问/admin资源您在
DispatcherServlet的联系人中初始化安全上下文的具体原因是什么?您是否也可以包括配置根应用程序上下文的
web.xml
部分?也许这就是答案没有任何影响的原因。我改为,但仍然可以访问/admin资源有没有具体原因让您在
DispatcherServlet
的联系人中初始化安全上下文?您是否也可以包括配置根应用程序上下文的
web.xml
部分?也许这就是答案没有任何影响的原因。您的解决方案对我有效,但我需要将其放在root-context.xml中。您的解决方案对我有效,但我需要将其放在root-context.xml中