【问题标题】:Spring MVC + Security. @Secured + @RequestMappingSpring MVC + 安全性。 @Secured + @RequestMapping
【发布时间】:2012-11-04 15:27:55
【问题描述】:

我有以下控制器:

@Controller
@RequestMapping("/api")
public class APIProvider {
    @Secured(value = {"isAuthenticated()"})
    @RequestMapping(value="/secure/{app}/{query}", method=RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<String> getList(HttpServletRequest request,
        @PathVariable("app") String app,
        @PathVariable("query") String query) {
        //....DO SMTH
    }
}

当尝试访问所需的 URL 时,我得到“找不到页面”。

删除@Secured 注释,解决了这个问题。所以请求映射是正确的。 同样对于@Secured 注释,我在security-config.xml 中添加了以下指令:

<security:global-method-security secured-annotations="enabled"/>

谁能帮我让@Secured + @RequestMapping 一起工作?

【问题讨论】:

  • 我的猜测是 isAuthenticated() 无法重新使用。我认为你应该选择@Secured(value="ROLE_AUTHENTICATED")
  • 仍然得到“未找到页面”。我应该在 security-config.xml 中定义角色 ROLE_AUTHENTICATED 吗?还是spring自己预定义的?
  • 我认为这取决于您如何配置您的 authenticationProvider,因为我们使用 sso,所以我们的默认角色是 ROLE_AUTHENTICATED:

标签: java spring-mvc spring-security


【解决方案1】:

试试这个@Secured("IS_AUTHENTICATED_FULLY")

【讨论】:

  • 仍然收到“找不到页面”消息
【解决方案2】:

在您的 security.xml 文件中,在 之后添加以下行:

<http use-expressions="true">
    <intercept-url pattern="/api/secure/**" access="isFullyAuthenticated() />
</http>

这将确保,如果用户完全通过身份验证,您的所有 /api/secure 请求都将得到处理。

【讨论】:

    【解决方案3】:

    我认为您还需要包含安全表达式处理程序。

    <security:global-method-security pre-post-annotations="enabled" >
        <security:expression-handler ref="expressionHandler"/>
    </security:global-method-security>
    
    <beans:bean id="expressionHandler"   class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHa ndler">
        <beans:property name="permissionEvaluator" ref="permissionEvaluator"/>
    </beans:bean>
    

    【讨论】:

      猜你喜欢
      • 2011-01-23
      • 2013-08-02
      • 1970-01-01
      • 2013-03-03
      • 2015-10-21
      • 2015-03-05
      • 2014-01-02
      • 2015-06-22
      • 2011-07-13
      相关资源
      最近更新 更多