与Spring Security在同一应用程序中的两个领域?

Mar*_*tör 17 java security spring spring-security

我们正在构建一个可供经过身份验证的用户和匿名用户使用的Web应用程序.如果您决定不注册/登录,则只有一组有限的功能.使用Spring Security通过OpenID完成用户身份验证.这很好.

但是,该应用程序还附带了部署的管理UI <host>/<context-root>/admin.我们可以在Spring Security中使用两个独立的领域(例如基本身份验证/admin/**)吗?如何配置?

gut*_*tch 18

Spring Security在版本3.1中添加了对此场景的支持,该版本目前作为候选版本提供.它由SEC-1171实现,语法的详细信息在3.1中包含的手册中.

但是它使用起来非常简单.基本上,您只需http在Spring Security配置中定义多个元素,每个领域一个元素.我们这样使用它:

<!-- Configure realm for system administration users -->
<security:http pattern="/admin/**" create-session="stateless">
    <security:intercept-url pattern='/**' access='ROLE_ADMIN' requires-channel="https" />
    <security:http-basic/>  
</security:http>


<!-- Configure realm for standard users -->
<security:http auto-config="true" access-denied-page="/error/noaccess" use-expressions="true" create-session="ifRequired">
    <security:form-login login-page="/login"
            ...
            ...
</security:http>
Run Code Online (Sandbox Code Playgroud)

需要注意的关键是pattern="/admin/**"第一个http元素.这告诉Spring,所有URL /admin都受该领域而不是默认领域的影响 - 因此URL正在/admin使用基本身份验证.