복붙노트

[SPRING] spring-security-context.xml에서 사용자 이름 / 패스워드를 이동하는 방법?

SPRING

spring-security-context.xml에서 사용자 이름 / 패스워드를 이동하는 방법?

내 프로젝트 중 하나에서 Spring Security를 ​​사용하고 있습니다. web-app에는 사용자가 로그인해야합니다. 따라서 다음과 같이 spring-security-context.xml 파일에 몇 가지 사용자 이름과 암호를 추가했습니다.

<authentication-manager>
    <authentication-provider>
        <user-service>
            <user name="user_1" password="password_1" authorities="ROLE_USER" />
            <user name="user_2" password="password_2" authorities="ROLE_USER" />
        </user-service>
    </authentication-provider>
</authentication-manager>

내 질문은 spring-security-context.xml에 유지하는 대신 이러한 사용자 이름 - 비밀번호 쌍을 다른 파일 (일부 속성 파일과 같은)로 이동하는 방법입니다. 그리고 그 파일 특성 파일을 읽는 방법?

해결법

  1. ==============================

    1.별도의 .properties 파일에 사용자 이름과 암호를 저장할 수 있습니다.

    별도의 .properties 파일에 사용자 이름과 암호를 저장할 수 있습니다.

    <user-service id="userDetailsService" properties="users.properties"/> 
    

    users.properties의 형식은 다음과 같습니다.

    jimi=jimispassword,ROLE_USER,ROLE_ADMIN,enabled
    bob=bobspassword,ROLE_USER,enabled
    

    데이터베이스에 저장하려면이 문서를 읽어보십시오. http://www.mkyong.com/spring-security/spring-security-form-login-using-database/

    참고 자료 : 스프링 보안 메모리 내 인증

  2. ==============================

    2.PropertyPlaceholderConfigurer를 사용할 수 있습니다 - 속성 파일에 넣은 다음 EL을 사용하여 참조하십시오 :

    PropertyPlaceholderConfigurer를 사용할 수 있습니다 - 속성 파일에 넣은 다음 EL을 사용하여 참조하십시오 :

    http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/beans.html#beans-factory-placeholderconfigurer

  3. ==============================

    3.데이터베이스 또는 LDAP로 이동하는 방법을 찾을 수 있습니다. 스프링 시큐리티는 반드시 둘 다 지원합니다.

    데이터베이스 또는 LDAP로 이동하는 방법을 찾을 수 있습니다. 스프링 시큐리티는 반드시 둘 다 지원합니다.

  4. ==============================

    4.나는 마지막으로 제안 된 방법을 시도해 보았습니다. 다음과 같이하면 좋았습니다.

    나는 마지막으로 제안 된 방법을 시도해 보았습니다. 다음과 같이하면 좋았습니다.

    웹 xml에 이러한 변경 사항을 추가했습니다.

    <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping> 
    
    <servlet-mapping>
    <servlet-name>service</servlet-name>
    <url-pattern>/*</url-pattern>
    </servlet-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> 
    

    스프링 보안 xml에 이러한 변경 사항을 추가하십시오.

    <security:authentication-manager alias="authenticationManager">
    <security:authentication-provider>
    <security:user-service>
    <security:user name="${resource.service.authentication.name}"
    authorities="${resource.service.authentication.authorities}"
    password="${resource.service.authentication.password}"/>
    </security:user-service>
    </security:authentication-provider>
    </security:authentication-manager>
    

    이러한 변경 사항을 애플리케이션 컨텍스트 xml에 추가하거나 속성 로더 xml이있는 경우     ...보다 나은

    <bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="placeholderPrefix" value="${" />
    <property name="placeholderSuffix" value="}" />
    <property name="locations">
    <list>
    <value>classpath:resourceservice.properties</value>
    </list>
    </property>
    </bean>
    

    그런 다음이 변경 사항을 등록 정보 파일 resourceservice.properties에 추가하십시오

    memberservice.authentication.name=usename
    memberservice.authentication.authorities=AUTHORISED
    memberservice.authentication.password=password
    

    Jersey를 사용하는 리소스에 이러한 변경 사항을 추가하십시오.

    @PUT
    @Path("{accountId}")
    @Consumes("application/xml")
    @PreAuthorize("hasRole('AUTHORISED')")
    public Response methodName
    
  5. ==============================

    5.이것은 나를 위해 스프링 보안 인증 및 권한 부여를 사용하여 속성 파일을 사용하여 작동합니다 :

    이것은 나를 위해 스프링 보안 인증 및 권한 부여를 사용하여 속성 파일을 사용하여 작동합니다 :

    <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:security="http://www.springframework.org/schema/security"
    
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans     
            http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-3.2.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
            http://www.springframework.org/schema/security
            http://www.springframework.org/schema/security/spring-security-3.2.xsd">
    
        <mvc:annotation-driven />
    
        <bean id="webPropertyConfigurer"
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="ignoreResourceNotFound" value="true" />
            <property name="ignoreUnresolvablePlaceholders" value="true" />
            <property name="locations">
                <list>
                    <value>classpath:abc.properties</value>
                </list>
            </property>
        </bean>
    
        <bean
            class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
    
        <security:http auto-config="true" use-expressions="true">
            <security:intercept-url pattern="/stat/login" access="permitAll"/>
            <security:intercept-url pattern="/stat/summary" access="hasRole('ROLE_ADMIN')" />
    
            <security:form-login login-page="/stat/login"
                default-target-url="/stat/summary" authentication-failure-url="/stat/loginError" /> 
        </security:http>
        <!-- Username and password used from xml -->
        <!-- <security:authentication-manager>
            <security:authentication-provider>
                <security:user-service>
                    <security:user name="xyz" password="xyz" authorities="ROLE_ADMIN" />
                </security:user-service>
            </security:authentication-provider>
        </security:authentication-manager> -->
    
        <security:authentication-manager>
            <security:authentication-provider>
                 <security:user-service>
            <security:user name="${stat.user}" password="${stat.pwd}" authorities="ROLE_ADMIN" />
            </security:user-service>
            </security:authentication-provider>
        </security:authentication-manager> 
    </beans>
    

    abc.properties 파일은 다음과 같습니다.

    stat.user=xyz
    stat.pwd=xyz
    

    봄 보안 구현을위한 web.xml 항목 :

    <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>
    
  6. from https://stackoverflow.com/questions/11075170/how-to-move-username-passwords-out-of-spring-security-context-xml by cc-by-sa and MIT license