技术开发 频道

使用Spring Security保护Web应用的安全

  清单 12. 获取访问令牌和构建 HTTP 请求

public OAuthConsumerToken getAccessTokenFromRequest(HttpServletRequest request) {
    OAuthConsumerToken token
= null;

    List
<OAuthConsumerToken> tokens = (List<OAuthConsumerToken>) request
        .getAttribute(OAuthConsumerProcessingFilter.ACCESS_TOKENS_DEFAULT_ATTRIBUTE);
    
if (tokens != null) {
        
for (OAuthConsumerToken consumerToken : tokens) {
            
if (consumerToken.getResourceId().equals(resourceId)) {
                token
= consumerToken;
                break;
            }
        }
    }
    return token;
}

public GetMethod getGetMethod(OAuthConsumerToken accessToken, URL url) {
    GetMethod method
= new GetMethod(url.toString());
    method.setRequestHeader(
"Authorization",
                 getHeader(accessToken, url,
"GET"));
    return method;
}

public String getHeader(OAuthConsumerToken accessToken, URL url,
            
String method) {
    ProtectedResourceDetails details
= support
        .getProtectedResourceDetailsService()
        .loadProtectedResourceDetailsById(accessToken.getResourceId());
    return support.getAuthorizationHeader(details, accessToken, url, method,
null);
}

  如 代码清单 12所示,OAuth for Spring Security 的过滤器会把 OAuth 认证成功之后的令牌保存在当前的请求中。通过 getAccessTokenFromRequest()方法就可以从请求中获取到此令牌。有了这个令牌之后,就可以通过 getHeader()方法构建出 HTTP 请求所需的 Authorization头。只需要在请求中添加此 HTTP 头,就可以正常访问到所需的数据。默认情况下,应用的 OAuth 令牌是保存在 HTTP 会话中的,开发人员可以提供其它的令牌保存方式,如保存在数据库中。只需要提供 org.springframework.security.oauth.consumer.token.OAuthConsumerTokenServices接口的实现就可以了。

  在介绍完与 OAuth 的集成方式之后,下面介绍一些高级话题。

  高级话题

  这些与 Spring Security 相关的高级话题包括权限控制表达式、会话管理和记住用户等。

0
相关文章