복붙노트

[SPRING] 시로 대 스프링 시큐리티 [닫힌]

SPRING

시로 대 스프링 시큐리티 [닫힌]

현재 Java 기반 보안 프레임 워크를 평가 중입니다. Spring 3.0 사용자이기 때문에 SpringSecurity가 올바른 선택이 될 것으로 보이지만 Spring 보안은 과도한 복잡성으로 인해 어려워 보입니다. 보안 구현이 쉽지 않은 것처럼 보입니다. 시로는 훨씬 일관되고 이해하기가 쉽습니다. 나는이 두 프레임 워크 사이에 장단점을 찾고있다.

해결법

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

    1.나도 봄 보안이 (나에게) 너무 복잡하다고 느낀다. 물론, 그들은 XML 설정의 양을 줄이기 위해 커스텀 XML 네임 스페이스를 만드는 것과 같은 복잡성을 줄이기 위해 일을 해왔다. 그러나 나에게 이것은 스프링 보안에 대한 나의 개인적인 근본적인 문제를 다루지 않는다 : 그 이름과 개념은 일반적으로 혼란 스럽다. 나를. '얻는 것'은 어렵습니다.

    나도 봄 보안이 (나에게) 너무 복잡하다고 느낀다. 물론, 그들은 XML 설정의 양을 줄이기 위해 커스텀 XML 네임 스페이스를 만드는 것과 같은 복잡성을 줄이기 위해 일을 해왔다. 그러나 나에게 이것은 스프링 보안에 대한 나의 개인적인 근본적인 문제를 다루지 않는다 : 그 이름과 개념은 일반적으로 혼란 스럽다. 나를. '얻는 것'은 어렵습니다.

    두 번째 당신은 시로를 사용하기 시작하지만, 당신은 단지 그것을 얻습니다. 보안 세계에서 이해하기 힘든 부분은 이해하기가 훨씬 쉽습니다. JDK (예 : Ciphers)에서 사용하기가 참기 힘든 것만 큼 견딜 수있는 수준으로 단순화되지만 사용하는 데는 기쁨이되는 경우가 많습니다.

    예를 들어 패스워드 해시 + 솔트 (salt + salt)를 Java 또는 스프링 시큐리티에서 base64로 인코딩하는 방법은? Shiro의 솔루션만큼 간단하고 직관적 인 것은 아닙니다.

    ByteSource salt = new SecureRandomNumberGenerator().nextBytes();
    new Sha512Hash(password, salt).toBase64();
    

    코 몬즈 - 코덱 또는 다른 어떤 것도 필요 없습니다. 시로 항아리.

    이제 봄 환경과 관련하여 대부분의 Shiro 개발자는 Spring을 기본 응용 프로그램 환경으로 사용합니다. 즉, Shiro의 Spring 통합은 탁월하며 모두 잘 작동합니다. Spring 애플리케이션을 작성한다면 보안 경험이 풍부 할 것이다.

    예를 들어,이 스레드의 다른 게시물에있는 Spring XML 구성 예제를 고려해보십시오. Shiro에서 (본질적으로) 동일한 작업을 수행하는 방법은 다음과 같습니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd>
    
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager"/>
        <property name="loginUrl" value="/login.jsp"/>
        <property name="successUrl" value="/home.jsp"/>
        <property name="unauthorizedUrl" value="/unauthorized.jsp"/>
        <property name="filterChainDefinitions">
            <value>
            /secure/** = authc
            /** = anon
            </value>
        </property>
    </bean>
    
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="myRealm"/>
    </bean>
    
    <bean id="myRealm" class="...">
        ...
    </bean>
    

    다른 Spring 예제보다 약간 더 자세하지만 IMO를 읽기가 더 쉽습니다.

    Shiro의 필터 체인 정의를 사용하면 일반적인 필터 체인과 웹 기반 보안 규칙을 정의하는 것이 가장 쉽습니다! web.xml에서 이들을 정의하는 것보다 훨씬 낫습니다.

    마지막으로 Shiro는 극단적 인 'pluggability'도 제공합니다. Shiro의 POJO / injection-friendly 아키텍처로 인해 무엇이든 구성 및 / 또는 교체 할 수 있음을 알 수 있습니다. Shiro는 기본적으로 거의 모든 것을 정상적인 기본값으로 설정하며 필요한 것만 재정의하거나 구성 할 수 있습니다.

    하루가 끝나면이 두 가지 중 하나를 선택하는 것이 당신의 정신 모델에 관한 것입니다. 두 가지 중 어느 것이 더 합리적인 지, 더 직관적입니까? 어떤 사람들에게는 시로, 다른 사람들에게는 봄 보안이 될 것입니다. 시로 (Shiro)는 봄 환경에서 훌륭하게 작동합니다. 그래서 두 사람 중 어느 쪽이 더 즐겁고 당신을 가장 잘 이해하는지에 따라 선택할 수 있습니다.

    Shiro의 Spring 통합에 대한 자세한 내용은 http://shiro.apache.org/spring.html을 참조하십시오.

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

    2.나는 Shiro를 사용한 경험이 없으며 Spring Security에 관해 여러분이 말한 것과 부분적으로 동의합니다. Spring Security 3.x 이전에는 Spring Security (또는 Acegi)가 설치하는 것이 매우 어려웠습니다. 간단한 역할 기반 구성은 적어도 140 줄의 신빙성있는 XML 구성을 필요로합니다. 실제로이 줄을 직접 계산했기 때문에이 사실을 알고 있습니다. 그것은 한 번 설정하는 것이 었습니다. 모든 구성이 의미하는 것을 잊어 버렸기 때문에 구성을 다시 만지면 영원히 작동하도록기도 할 수 있습니다. :)

    나는 Shiro를 사용한 경험이 없으며 Spring Security에 관해 여러분이 말한 것과 부분적으로 동의합니다. Spring Security 3.x 이전에는 Spring Security (또는 Acegi)가 설치하는 것이 매우 어려웠습니다. 간단한 역할 기반 구성은 적어도 140 줄의 신빙성있는 XML 구성을 필요로합니다. 실제로이 줄을 직접 계산했기 때문에이 사실을 알고 있습니다. 그것은 한 번 설정하는 것이 었습니다. 모든 구성이 의미하는 것을 잊어 버렸기 때문에 구성을 다시 만지면 영원히 작동하도록기도 할 수 있습니다. :)

    Spring Security 3.x를 사용하면 엄청나게 개선되었습니다. 140 줄에서 ~ 30 줄로 구성을 대폭 단축하는 보안 네임 스페이스를 도입했습니다. 다음은 내 프로젝트 중 하나 인 Spring Security 3.x의 예입니다.

    <?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"
        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.xsd">
    
        <security:http auto-config="true">
            <security:form-login login-page="/index.do" authentication-failure-url="/index.do?login_error=1" default-target-url="/index.do"
                always-use-default-target="true" />
            <security:logout logout-success-url="/index.do" />
            <security:intercept-url pattern="/secure/**" access="ROLE_ADMIN,ROLE_USER" />
            <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
        </security:http>
    
        <bean id="customAuthenticationProvider" class="my.project.CustomAuthenticationProviderImpl">
            ...
        </bean>
    
        <security:authentication-manager>
            <security:authentication-provider ref="customAuthenticationProvider" />
        </security:authentication-manager>
    
    </beans>
    

    Spring Security 3.x의 장점은 극도로 구성 가능하다는 점입니다. 이는 주된 단점 중 하나 인 : 이해하기가 너무 복잡합니다. Spring Security가 사용하는 몇 가지 용어에 부분적으로 만 익숙하기 때문에이 문서는 읽기가 쉽지 않습니다. 그러나 사용자 지정 구성을 만들거나 보안 수준을 정교하게 제어해야하는 경우 옵션이 있습니다. 또는 위의 <30 줄을 사용하여 역할 기반 보안 검사를 수행 할 수 있습니다.

    스프링 보안에 대해 정말 좋아하는 것은 일단 보안이 프로젝트에 완벽하게 통합되면 설정됩니다. 마치 실제 프로젝트 코드가 보안의 존재를 모르는 것 같고 ... 미래에 보안 구성 요소를 쉽게 분리하거나 업그레이드 할 수 있기 때문에 좋습니다 (예 : 데이터베이스 인증을 LDAP / CAS로 변경). auth).

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

    3.몇 달 동안 스프링 보안 (버전 3.1)을 사용하고 있었고 매우 만족했습니다. 그것은 정말 강력하고 특히 전에했던 것처럼 모든 것을 손으로 구현 한 후에 아주 좋은 기능을 가지고 있습니다! 내가 어딘가에 읽은 것처럼, 앱의 개발 초기에 한 번 설정 한 다음, 작업이 끝날 때까지 계속 작동하도록기도하는 것입니다. 해결해야 할 경우 아마 매개 변수의 대부분을 잊어 버렸을 것입니다.

    몇 달 동안 스프링 보안 (버전 3.1)을 사용하고 있었고 매우 만족했습니다. 그것은 정말 강력하고 특히 전에했던 것처럼 모든 것을 손으로 구현 한 후에 아주 좋은 기능을 가지고 있습니다! 내가 어딘가에 읽은 것처럼, 앱의 개발 초기에 한 번 설정 한 다음, 작업이 끝날 때까지 계속 작동하도록기도하는 것입니다. 해결해야 할 경우 아마 매개 변수의 대부분을 잊어 버렸을 것입니다.

    그러나 더 복잡한 보안 요구 사항을 가진 새로운 프로젝트가 등장했습니다. 간단히 말해, 몇 가지 관련 웹 응용 프로그램 사이에 일종의 사용자 지정 SSO를 구현해야했습니다.

    HTTP 로직, 쿠키, 세션 ID 및 물건의 순서에서 무엇을 달성해야하는지 정확히 알았지 만, 순서는 어떻게 될지 알고 있었지만, 봄 보안 API로 어려움을 겪고 하루의 더 좋은 부분을 보냈지 만 아직도 이해할 수 없었습니다 정확히 어떤 클래스 나 인터페이스를 구현하거나 오버 라이딩하는지, 그리고 컨텍스트에서이를 연결하는 방법을 설명합니다. 전체 API는 때로는 복잡하고 약간 밀교 적으로 느껴졌습니다. 그리고 문서는 일반적인 사용 사례와 일부 사용자 정의에도 매우 적합하지만 필자의 요구를 충족시킬 정도로 충분히 깊숙해졌습니다.

    여기에 나와 웹의 다른 장소에서 대답을 읽은 후 Shiro가 내 필요를 이해하고 사용자 지정하기가 더 쉬울 것이라는 인상을 받았습니다. 그래서 나는 그것을 시험해 보았다.

    그리고 그 일을 한 후에는 Spring Webapp에서 기본 인증 및 권한 부여 시스템을 문제없이 설정할 수있을뿐 아니라 맞춤 SSO 동작을 구현할 수 있기 때문에 API에 대해 충분히 배울 수있어서 기뻤습니다. 찾고. 난 단지 2 ~ 3 개의 클래스를 확장해야했기 때문에 모든 것이 봄 환경에서 XML 구성의 25 줄 정도 밖에 걸리지 않았습니다.

    결론적으로 사용의 용이성과 학습 곡선 측면에서 Shiro는 실제로 상당히 좋아합니다. 일부 기능이 없거나 다른 문제가 발생하지 않는 한, 아마도 Shiro는 앞으로도 함께 할 것입니다. 지금까지).

    TL : 둘 다 강력하지만 시로는 배우기가 훨씬 쉽습니다.

  4. from https://stackoverflow.com/questions/4991084/shiro-vs-springsecurity by cc-by-sa and MIT license