Shiro vs.스프링 보안
저는 현재 Java 기반의 보안 프레임워크를 평가하고 있습니다.Spring 3.0 사용자이기 때문에 Spring Security가 적절한 선택이라고 생각됩니다만, Spring Security는 과도한 복잡성에 시달리고 있는 것 같습니다.Spring Security가 보안을 구현하기 쉽게 하고 있는 것 같지는 않습니다.Shiro는 훨씬 더 일관성 있고 이해하기 쉬운 것 같습니다.나는 이 두 프레임워크 사이의 장단점 목록을 찾고 있다.
스프링 시큐리티가 너무 복잡하게 느껴진다는 데 저도 동의합니다.물론 XML 구성의 양을 줄이기 위해 커스텀 XML 네임스페이스를 작성하는 등 복잡성을 줄이기 위한 작업을 수행했지만, 이러한 작업은 Spring Security와 관련된 개인적인 근본적인 문제를 해결하지 못합니다. 이름과 개념은 일반적으로 혼란스러운 경우가 많습니다.그냥 '얻기'란 어렵다.
하지만 Shiro를 사용하기 시작하면 바로 알 수 있습니다.보안 세계에서 이해하기 어려운 것이 훨씬 더 쉽게 이해할 수 있습니다.JDK에서 사용하기 어려운 것(암호 등)은 참을 수 있을 뿐만 아니라 사용하기에 즐거운 수준으로 간소화됩니다.
예를 들어 Java 또는 Spring Security에서 암호와 base64를 해시+솔트하려면 어떻게 해야 합니까?Shiro의 솔루션만큼 심플하고 직관적인 것도 아닙니다.
ByteSource salt = new SecureRandomNumberGenerator().nextBytes();
new Sha512Hash(password, salt).toBase64();
커먼 코덱 같은 건 필요 없어요시로 항아리만.
현재 Spring 환경에 대해서는 대부분의 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>
다른 스프링 예보다 약간 더 상세하지만 IMO를 읽는 것이 더 쉽습니다.
또한 Shiro의 필터 체인 정의를 사용하는 것이 일반적인 필터 체인 및 웹 기반 보안 규칙을 정의하는 가장 쉬운 방법임을 알게 될 것입니다.web.xml에서 정의하는 것보다 훨씬 좋습니다.
마지막으로 Shiro는 탁월한 '플러그 기능'도 제공합니다.Shiro의 POJO/injection 친화적인 아키텍처 덕분에 거의 모든 것을 구성 및/또는 교체할 수 있습니다.Shiro는 거의 모든 것을 디폴트로 하여 필요한 것만 덮어쓰거나 설정할 수 있습니다.
결국, 이 두 가지 중 하나를 선택하는 것이 여러분의 정신 모델에 더 가깝다고 생각합니다. 이 둘 중 어떤 것이 더 말이 되고 여러분에게 더 직관적인가?Shiro가 될 수도 있고, Spring Security가 될 수도 있습니다.Shiro는 봄의 환경에 매우 적합하기 때문에, 둘 중 어느 쪽이 더 즐겁고, 당신에게 가장 적합한지 선택하는 것이 좋다고 생각합니다.
Shiro의 Spring 통합에 대한 자세한 내용은http://http://shiro.apache.org/spring.html 를 참조해 주세요.
저는 Shiro를 사용한 경험이 없고, Spring Security에 대해 말씀하신 것에 "일부" 찬성합니다.Spring Security 3.x 이전 버전에서는 Spring Security(Acegi)의 셋업이 매우 어려웠습니다.단순한 역할 기반 구성에는 적어도 140줄의 암호화 XML 구성이 필요합니다.제가 직접 세어봤기 때문에 알고 있습니다.이것은 한 번 셋업하고, 이 설정이 다시 조작하지 않고 영원히 기능하기를 기도하는 것입니다.설정이 무엇을 의미하는지 잊어버릴 수 있기 때문입니다.:)
Spring Security 3.x는 스프링 시큐리티입니다., 그럼 이제 소개하겠습니다.security
네임스페이스는 구성을 140줄에서 최대 30줄로 대폭 단축합니다.제 중 3.입니다.- 음음 、 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행 미만의 행을 사용하여 역할 기반 보안 체크를 수행할 수 있습니다.
Spring Security의 가장 큰 장점은 보안 설정이 완료되면 프로젝트에 심리스하게 통합된다는 것입니다.실제 프로젝트 코드는 보안의 존재를 모르는 것 같습니다.향후 보안 컴포넌트를 쉽게 분리 또는 업그레이드할 수 있기 때문에 좋습니다(예를 들어 데이터베이스 인증을 LDAP/CAS 인증으로 변경).
Spring Security(버전 3.1)를 몇 달 동안 사용하고 있었는데 매우 만족스러웠습니다.특히 지금까지와 같이 모든 것을 수작업으로 실장하고 나서, 매우 파워풀한 기능을 가지고 있습니다!어디선가 읽은 것처럼 앱의 개발 시작 직전에 한번 셋업하고, 그 후, 끝까지 계속 동작하도록 기도하고 있습니다.왜냐하면, 아마 고쳐야 할 것 같기 때문입니다.파라미터 지정에 필요한 대부분의 정보를 잊어버렸습니다.
그러나 그 후 새로운 프로젝트가 시작되어 보안 요건이 더욱 복잡해졌습니다.즉, 관련된 웹 앱 몇 개 사이에 일종의 커스텀 SSO를 구현해야 했습니다.
HTTP 로직, 쿠키, 세션 ID 등의 관점에서 무엇을 달성하고 싶은지, 그리고 어떤 순서로 어떤 일이 일어나야 하는지 정확히 알고 있었습니다.그러나 하루의 대부분을 Spring Security API와 씨름하며 보냈고, 어떤 클래스나 인터페이스를 구현하거나 덮어쓸지, 그리고 어떻게 그것들을 콘텍스트에 넣는지는 아직 알 수 없었습니다.API 전체가 매우 복잡하고 때로는 좀 난해하게 느껴졌다.또한 이 문서는 일반적인 사용 사례 및 일부 사용자 지정에 매우 유용하지만, 제 요구를 충분히 충족시키지는 못했습니다.
여기나 웹에서 답을 읽어본 결과, Shiro가 더 알기 쉽고, 제 요구에 맞게 커스터마이즈 할 수 있을 것 같은 느낌이 들었습니다.그래서 한번 해봤어요.
그리고 하루 동안 작업한 결과 API에 대해 충분히 배울 수 있었고, Spring 웹 앱에서 기본 인증 및 인증 시스템을 문제없이 설정할 수 있을 뿐만 아니라 원하는 맞춤형 SSO 동작을 구현할 수 있었습니다.2-3개의 클래스만 확장하면 되고, 봄의 컨텍스트에서는 모든 것이 약 25줄의 XML 설정만으로 끝납니다.
결론적으로 사용의 용이성이나 학습곡선의 측면에서는 Shiro가 매우 마음에 들고, 향후에는 부족한 기능이나 (지금까지) 문제가 발생하지 않는 한, 그것을 따를 것이라고 생각합니다.
TL;DR: 둘 다 강력하지만 Shiro가 훨씬 배우기 쉽습니다.
언급URL : https://stackoverflow.com/questions/4991084/shiro-vs-springsecurity
'programing' 카테고리의 다른 글
Laravel JSON Where Clauses with MariaDB 10.2.16 LongText 열을 사용할 수 있습니까? (0) | 2022.11.23 |
---|---|
django.db.db.ss.Operation Error: (1071, '지정된 키가 너무 깁니다. 최대 키 길이는 767바이트입니다') (0) | 2022.11.23 |
.jspf 파일 확장자가 뭐죠?어떻게 컴파일 할 것인가? (0) | 2022.11.03 |
mysql: Whoami? (0) | 2022.11.03 |
Python을 사용하여 OpenCV에서 이미지를 자르는 방법 (0) | 2022.11.03 |