fabicon.ico Or unwanted strings like “6_S3” get ap

2019-04-16 03:22发布

问题:

I have integrated spring social with my application for login with Facebook and Twitter. Sometime it is working fine and some time it is appending fabicon.ico or some unwanted string like 6_S3. Can anyone suggest what I am doing wrong?

Consider my callback url registered with my app in Facebook/Twitter is

myapp.com/  and in case of appending the fabicon / 6_S3 it is returning myapp.com/fabicon.ico or myapp.com/6_s3

My web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>myapp</display-name>

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping> 

    <filter>
        <display-name>springMultipartFilter</display-name>
        <filter-name>springMultipartFilter</filter-name>
        <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springMultipartFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>
            org.springframework.web.filter.DelegatingFilterProxy
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- Initialize spring context -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- Enable webapp Scopes -->
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

/WEB-INF/applicationContext.xml is

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:cache="http://www.springframework.org/schema/cache"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd
    http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">


    <import resource="classpath:myapp-servlet.xml" />
    <import resource="classpath:myapp-security.xml" />
    <import resource="classpath:myapp-ehCache-context.xml" />
    <import resource="classpath:myapp-social.xml" />

    <mvc:annotation-driven/>
    <mvc:default-servlet-handler/>
    <mvc:resources mapping="/resources/**" location="/resources" />
    <context:component-scan base-package="com.myapp.web.controller" />

    <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass">
                <value>
                    org.springframework.web.servlet.view.tiles3.TilesView
                </value>
        </property>
    </bean>

    <bean id="tilesConfigurer"  class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
        <property name="definitions" ref="tilesList"/>  
    </bean>  

    <bean id="tilesList" class="org.springframework.beans.factory.config.ListFactoryBean">
        <property name="sourceList">
            <list>
                <value>/WEB-INF/tiles.xml</value>
            </list>
        </property>
    </bean>

    <context:property-placeholder location="classpath:Queries.properties" order="-4" ignore-unresolvable="true" ignore-resource-not-found="true"/>

    <!-- Configure data source -->
     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/myapp" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </bean>

    <!-- Initialization for TransactionManager -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <bean id="iBaseDao" class="com.myapp.web.common.impl.BaseDaoImpl">
        <property name="dataSource" ref="dataSource" />
        <property name="transactionManager" ref="transactionManager" />
    </bean>

    <bean id="filterMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
        <property name="maxUploadSize" value="-1" />
    </bean> 

</beans>

Now these are my other config xml files:

<import resource="classpath:myapp-servlet.xml" />
<import resource="classpath:myapp-security.xml" />
<import resource="classpath:myapp-ehCache-context.xml" />
<import resource="classpath:myapp-social.xml" />

myapp-security.xml is

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:security="http://www.springframework.org/schema/security"
       xmlns:http="http://www.springframework.org/schema/security"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd">

    <!-- Static resources such as CSS and JS files are ignored by Spring Security -->
    <security:http pattern="/resources/**" security="none" />

    <security:http use-expressions="true">
        <!-- Enables Spring Security CSRF protection -->
        <security:csrf/>
        <!-- Configures the form login -->
        <security:form-login
                login-page="/login"
                login-processing-url="/login/authenticate"
                authentication-failure-url="/login?error=bad_credentials"
                username-parameter="username"
                password-parameter="password"/>
        <!-- Configures the logout function -->
        <security:logout
                logout-url="/logout"
                logout-success-url="/home"
                delete-cookies="JESSIONID"/>
        <!-- Anyone can access these urls -->
        <security:intercept-url pattern="/auth/**" access="permitAll"/>
        <security:intercept-url pattern="/login" access="permitAll"/>
        <security:intercept-url pattern="/signin/**" access="permitAll"/>
        <security:intercept-url pattern="/signup/**" access="permitAll"/>
        <security:intercept-url pattern="/resources/**" access="permitAll"/>
        <security:intercept-url pattern="/home/**" access="permitAll"/>
        <security:intercept-url pattern="/user/register/**" access="permitAll"/>

        <!-- The rest of our application is protected. -->
        <security:intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>

        <!-- Adds social authentication filter to the Spring Security filter chain. -->
        <security:custom-filter ref="socialAuthenticationFilter" before="PRE_AUTH_FILTER" />
    </security:http>

    <!--
        Configures the authentication manager bean which processes authentication
        requests.
    -->
    <security:authentication-manager alias="authenticationManager">
        <security:authentication-provider user-service-ref="userDetailsService">
            <security:password-encoder ref="passwordEncoder"/>
        </security:authentication-provider>

        <security:authentication-provider ref="socialAuthenticationProvider"/>
    </security:authentication-manager>

    <!-- This is used to hash the password of the user. -->
    <bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
        <constructor-arg index="0" value="10"/>
    </bean>

    <!--
        Configures the social authentication filter which integrates Spring Social
        with Spring Security.
    -->
    <bean id="socialAuthenticationFilter" class="org.springframework.social.security.SocialAuthenticationFilter">
        <constructor-arg index="0" ref="authenticationManager"/>
        <constructor-arg index="1" ref="userIdSource"/>
        <constructor-arg index="2" ref="usersConnectionRepository"/>
        <constructor-arg index="3" ref="connectionFactoryLocator"/>

        <!-- Sets the url of the registration form. -->
        <property name="signupUrl" value="/user/register"/>
    </bean>

    <!--
        Configures the social authentication provider which processes authentication requests
        made by using supported social authentication services (FB, Twitter and so on).
    -->
    <bean id="socialAuthenticationProvider" class="org.springframework.social.security.SocialAuthenticationProvider">
        <constructor-arg index="0" ref="usersConnectionRepository"/>
        <constructor-arg index="1" ref="socialUserDetailsService"/>
    </bean>

    <!--
        This bean is used to load the user specific data when social sign in
        is used.
    -->
    <bean id="socialUserDetailsService" class="com.myapp.web.security.SocialUserDetailsServiceImpl">
        <constructor-arg index="0" ref="userDetailsService"/>
    </bean>

    <!--
        This bean encrypts the authorization details of the connection. In
        our example, the authorization details are stored as plain text.
        DO NOT USE THIS IN PRODUCTION.
    -->
    <bean id="textEncryptor" class="org.springframework.security.crypto.encrypt.Encryptors" factory-method="noOpText" />

    <!-- This bean is load the user specific data when form login is used. -->
    <bean id="userDetailsService" class="com.myapp.web.security.UserDetailsServiceImpl" autowire="constructor"/>

    <!-- This bean determines the account ID of the user -->
    <bean id="userIdSource" class="org.springframework.social.security.AuthenticationNameUserIdSource"/>

    <!--
        This bean manages the connection flow between the account provider and
        the example application.
    -->
    <bean id="connectController" class="org.springframework.social.connect.web.ConnectController" autowire="constructor"/>
</beans>

Now my myapp-social.xml file is:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:twitter="http://www.springframework.org/schema/social/twitter"
       xmlns:social="http://www.springframework.org/schema/social"
       xmlns:facebook="http://www.springframework.org/schema/social/facebook"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
       http://www.springframework.org/schema/social http://www.springframework.org/schema/social/spring-social.xsd
       http://www.springframework.org/schema/social/twitter http://www.springframework.org/schema/social/spring-social-twitter.xsd
       http://www.springframework.org/schema/social/facebook http://www.springframework.org/schema/social/spring-social-facebook.xsd">

    <!-- Ensures that configuration properties are read from a property file -->
    <context:property-placeholder location="classpath:application.properties"/>

    <!--
        Configures FB and Twitter support.
    -->
    <bean id="connectionFactoryLocator" class="org.springframework.social.security.SocialAuthenticationServiceRegistry">
        <property name="authenticationServices">
            <list>
                <bean class="org.springframework.social.facebook.security.FacebookAuthenticationService">
                    <constructor-arg value="${facebook.app.id}" />
                    <constructor-arg value="${facebook.app.secret}" />
                    <!-- Important: The next property name changed from "scope" to "defaultScope" in 1.1.0.M4 -->
                    <property name="defaultScope" value="email,publish_actions,publish_stream,read_stream,user_status,user_photos,offline_access" />               
                </bean>
                <bean class="org.springframework.social.twitter.security.TwitterAuthenticationService">
                    <constructor-arg value="${twitter.consumer.key}" />
                    <constructor-arg value="${twitter.consumer.secret}" />
                </bean>
            </list>
        </property>
    </bean>

    <!--
        Configures the connection repository. This application uses JDBC
        connection repository which saves connection details to database.
        This repository uses the data source bean for obtaining database
        connection.
    -->
    <social:jdbc-connection-repository/>

    <bean id="facebookApiHelper" class="org.springframework.social.facebook.config.support.FacebookApiHelper">
        <constructor-arg index="0" ref="usersConnectionRepository"/>
        <constructor-arg index="1" ref="userIdSource"/>
    </bean>
</beans>

can anyone suggest what I am doing wrong, why some time the fabicon.ico or unwanted strings is getting appended to my callback url?