Java 使用Spring oAuth2.0进行身份验证
我想通过facebook/twitter帐户验证我网站上的用户。但在spring的例子中,spring要求我首先登录,只有在登录之后,当用户已经有了角色,我才能连接到facebook并获取一些数据。即使facebookData controller上没有权限(Java 使用Spring oAuth2.0进行身份验证,java,spring,spring-security,oauth-2.0,Java,Spring,Spring Security,Oauth 2.0,我想通过facebook/twitter帐户验证我网站上的用户。但在spring的例子中,spring要求我首先登录,只有在登录之后,当用户已经有了角色,我才能连接到facebook并获取一些数据。即使facebookData controller上没有权限(intercept url pattern=“/**”access=“permitAll”),spring也会将我重定向到登录页面 这是否意味着OpenAuth不能用于身份验证 匿名用户 我的春季安全: <http use
intercept url pattern=“/**”access=“permitAll”
),spring也会将我重定向到登录页面
- 这是否意味着OpenAuth不能用于身份验证 匿名用户
<http use-expressions="true">
<form-login login-page="/login" />
<intercept-url pattern="/**" access="permitAll" />
<logout />
<custom-filter ref="oauth2ClientFilter" after="EXCEPTION_TRANSLATION_FILTER" />
</http>
<oauth:client id="oauth2ClientFilter" />
<oauth:resource id="facebook" type="authorization_code" client-id="..." client-secret="..." authentication-scheme="query"
access-token-uri="https://graph.facebook.com/oauth/access_token" user-authorization-uri="https://www.facebook.com/dialog/oauth" token-name="oauth_token" client-authentication-scheme="form" scope="email"/>
<bean id="facebookController" class="org.springframework.security.oauth.examples.tonr.mvc.FacebookController" />
<oauth:rest-template resource="facebook" id="fasebookRestTemplate">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<bean class="org.springframework.http.MediaType">
<!--facebook sends its json as text/javascript for some reason -->
<constructor-arg value="text" />
<constructor-arg value="javascript" />
</bean>
<bean class="org.springframework.http.MediaType">
<constructor-arg value="application" />
<constructor-arg value="json" />
</bean>
</list>
</property>
</bean>
</list>
</property>
</oauth:rest-template>
和facebook控制器:
@Autowired
private RestOperations facebookRestTemplate;
@RequestMapping("/facebook/info")
public String photos(Model model) throws Exception {
ObjectNode resultNode = facebookRestTemplate.getForObject("https://graph.facebook.com/me/friends", ObjectNode.class);
ArrayNode data = (ArrayNode) resultNode.get("data");
ArrayList<String> friends = new ArrayList<String>();
for (JsonNode dataNode : data) {
friends.add(dataNode.get("name").getTextValue());
}
model.addAttribute("friends", friends);
return "facebook";
}
@Autowired
私有REST操作facebookRestTemplate;
@请求映射(“/facebook/info”)
公共字符串照片(模型)引发异常{
ObjectNode resultNode=facebookRestTemplate.getForObject(“https://graph.facebook.com/me/friends,ObjectNode.class);
ArrayNode数据=(ArrayNode)resultNode.get(“数据”);
ArrayList friends=新建ArrayList();
for(JsonNode-dataNode:data){
add(dataNode.get(“name”).getTextValue());
}
model.addAttribute(“朋友”,朋友);
返回“facebook”;
}
有一个很酷的库,它可以做到这一点:
我已经成功地使用了它——用户所要做的就是连接到Facebook以获得身份验证。要在第一次连接时创建新用户,只需扩展SpringSocialSecurityConnectionSignUp
,覆盖execute
方法。Github页面很好地解释了您需要做什么。它还有一些非常有用的示例项目
这个项目在Maven。玩得开心 谢谢你们,但我不打算只连接facebook和twitter,不管我在这里找到什么答案