2

我正在为移动应用程序开发服务器端,如下所示: - 我正在使用 Spring MVC 框架,并且我已经按照下面的代码为 restful 请求(使用 JSON)实现了 BASIC AUTHENTICATION。

<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:security="http://www.springframework.org/schema/security"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/security
       http://www.springframework.org/schema/security/spring-security-3.1.xsd">



       <security:http  create-session="stateless" entry-point-     ref="restAuthenticationEntryPoint" use-expressions="true">

   <security:intercept-url pattern="/restful" access="hasRole('ROLE_USER')"/>
   <security:intercept-url pattern="/restful/*" access="hasRole('ROLE_USER')"/>
       <security:intercept-url pattern="/login" access="permitAll"/>
  <security:custom-filter ref="myFilter" after="BASIC_AUTH_FILTER"/>

    <!-- <security:logout />  -->
  </security:http>


<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider
         user-service-ref="daoUserService">
         <security:password-encoder ref="passwordEncoder" />
    </security:authentication-provider>
</security:authentication-manager>




<bean id="restAuthenticationEntryPoint"   class="com.bp_gae.utils.RestAuthenticationEntryPoint">
 </bean>

<bean id="myFilter"
    class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="authenticationEntryPoint" ref="restAuthenticationEntryPoint" />
    </bean>


    <bean
    id="passwordEncoder"
    class="com.bp_gae.utils.AppPasswordEncoder" />

 <bean
    id="daoUserService"
    class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
    <property
        name="dataSource"
        ref="dataSource" />
    <property
        name="enableGroups"
        value="false" />
    <property
        name="enableAuthorities"
        value="true" />
    <property name="usersByUsernameQuery">
        <value>
            select username,password, 1 
            from users
            where username = ?
        </value>
    </property>
    <property name="authoritiesByUsernameQuery">
        <value>
            select username,authority
            from users c,
            user_roles cp
            where c.user_id = cp.user_id
            and   c.username = ?
        </value>
    </property>
</bean>



</beans>

因此,移动客户端在每个请求中发送用户名、密码,并检查数据库以确定他是否可以访问受保护的资源。没有创建会话。新要求是集成 Facebook 身份验证。1) 移动用户在客户端登录并进行身份验证,并将身份验证令牌发送到服务器。2)服务器应该使用我创建的 FB 应用程序中的 facebook app-id 和 app-secret 使用该令牌(检查此令牌是否对 facebook 有效)获取用户 facebook 详细信息。为此,我正在使用 Spring Social。3) 在基本或 Facebook 成功认证后,所有受保护的资源都可以访问。4)我已经在数据库中有一个用户表(用户名、电子邮件、密码),我正在考虑用 SocialUsers 创建另一个表(电子邮件、

我不确定如何在我的 security.xml 文件中使用这两种身份验证方法。- 我必须为社交验证设置另一个过滤器吗?- 在那种情况下,我怎样才能使用这两个过滤器?欢迎任何建议/示例代码!

4

0 回答 0