mkk 关于资源的解释 : https://andaily.com/blog/?cat=19
resource用于将系统提供的各类资源进行分组管理,
每一个resource对应一个resource-id, 而一个client details至少要有一个resource-id (对应OauthClientDetails.resourceIds oauth_client_details.resource_ids).
1、配置resourceId
在spring-oauth-server的security.xml配置了两个资源id:
这就是配置resource的地方, 看见里面的两个resource-id值.
2、使用resourceId
在spring-oauth-server的security.xml配置了两个<http>配置, 一个的pattern为/m/**, 另一个为/unity/**,
这就是资源与Spring Security整合后的配置,
注意每个<http>配置里的 ROLE_UNITY与ROLE_MOBILE, 这对应Spring Security的权限,应数据库中的user_.previllage:
同理 scope_read字段对应数据库中的oauth_client_details.scope.
接着我们添加一个自己的resource, 假设resource-id = myResource, url pattern为/my/api/**, 权限为ROLE_MY_RESOURCE, scope为 read; 其配置如下:
1.添加<oauth2:resource-server> , resource-id=myResource
如下:
<oauth2:resource-server id="myResourceServer" resource-id="myResource" token-services-ref="tokenServices"/>
注意, id值需要唯一
2.添加<http>配置,
如下:
<http pattern="/my/api/**" create-session="never" entry-point-ref="oauth2AuthenticationEntryPoint"
access-decision-manager-ref="oauth2AccessDecisionManager" use-expressions="false">
<anonymous enabled="false"/> <intercept-url pattern="/my/api/**" access="ROLE_MY_RESOURCE,SCOPE_READ"/> <custom-filter ref="myResourceServer" before="PRE_AUTH_FILTER"/>
<access-denied-handler ref="oauth2AccessDeniedHandler"/>
<csrf disabled="true"/>
</http>
说明: 一个<resource-server>可以配置多个<http>, 使用不同的url pattern
OK, 配置完成, 新增resource: myResource;
这时候, 所有以/my/api/** 开头的URL请求都将受到 OAUTH2的保护,
接下来在业务中创建client details, 记得把resourceIds设置为myResource,且要有ROLE_MY_RESOURCE的权限.