Java 中使用 Spring-security(一),java 做视频直播
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/sche
ma/securityhttp://www.springframework.org/schema/security/spring-security-3.1.xsd">............</beans>
要启用 Spring Security,您需要将以下过滤器添加到/WEB-INF/web.xml。
<filter-mapping><filter-name>springSecurityFilterChain</filter-name><url-pattern>/*</url-pattern></filter-mapping>
因此,在*<filter>标签中,您需要定义 filter-name 和 filter-class*,就像为应用程序定义 servlet-name 和 servlet-class 一样。只不过这里 filter-name 和 filter-class 是固定的。
在*<filter-mapping>*标记中,您可以定义应该通过 spring 安全性检查的路径,一般是个正则表达式。
该 springSecurityFilterChain 过滤器即 DelegatingFilterProxy,就是 servlet 对应委托的过滤器和拦截器。拦截器内部进行我们的特殊动作,如:身份验证,授权。
Spring 安全配置:
您需要在应用程序上下文 xml 文件(或 servlet config xml 文件)中的*<beans ...> .... </ beans>*标记下定义以下标记。
" access="permitAll" /><security:intercept-url pattern="/" access="hasRole('USER')" /><security:intercept-url pattern="/admin**" access="hasRole('ADMIN')" />
<security:form-login />
在*<security:http ...>标记内,添加要保护的资源。如上所示,我使用<security:intercept-url>标记定义了四个拦截器*。
在这里,我配备了几种校验,哪些 URL 允许所有用户(包括匿名用户)访问,哪些 URL 仅限于某些用户角色访问。
例如:
在上面的代码片段中“/login”,“/ resources /”路径开头的任何页面,都可以被包括匿名用户在内的所有人访问。
而“/ admin”路径,只有具备 ADMIN 角色的用户才可以访问,依此类推...
Spring-securitydh 提供了一个默认的内置登录页面,其中有两个文本框用于输入用户名和密码,还有一个提交按钮用于提交凭据以进行验证。您无需为应用程序设计登录表单。一旦用户在其浏览器上打开应用程序 URL,spring-security 将检查用户是否未登录,然后将用户重定向到 spring-security 提供的默认登录表单。
如果需要自定义登录页面,则可以将 spring-security 配置为使用自定义登录页面。您可以使用<security:form-login>标记在<security:http> ... </ security:http>标记内定义自定义登录表单页面。以下是配置示例。
<security:http auto-config="true" use-expressions="true">
<security:intercept-url pattern="/login**" access="permitAll" /><security:intercept-url pattern="/resources/" access="permitAll" /><security:intercept-url pattern="/" access="hasRole('USER')" /><security:intercept-url pattern="/admin**" access="hasRole('ADMIN')" />
login-page="/login"
default-target-url="/"
authentication-failure-url="/login?error=1"
username-parameter="username"
password-parameter="password" />
</security:http>
在<security:form-login ...>标记中,
在“login-page”中,您可以指定自定义登录页面 URL 路径。
在“default-target-url”中,您可以指定用户在成功登录后应该导航的 URL。
在“authentication-failure-url”中,您可以指定用户在登录失败后应该导航的 URL。
“username-parameter”和“password-parameter” - 这两个是可选的。默认情况下,spring-security 在登录表单中接受参数名称“j_username”和“j_password”作为用户名和密码。如果要在登录表单中为用户名和密码输入字段指定任何其他名称,则可以在<security:form-login ...>标记中的这两个属性中指定自定义参数名称。
在<security:logout ...>标记中,
在“logout-success-url”中,您可以指定在用户在退出登陆后,应该跳向哪个页面 URL 路径。
在</ security:http>标记结束后,您需要添加以下标记,即<security:authentication-manager>。这适用于身份验证管理器。
security:authentication-managersecurity:authentication-providersecurity:user-service<security:user name="stitis" password="mindfire" authorities="USER" /></security:user-service></security:authentication-provider></security:authentication-manager>
根据我们前面概述,为了安全,在用户请求到达 Servlet 之前,或者说在请求到达 Spring Dispatcher Servlet 之前, 我们需要进行身份验证和授权检查的预处理和后期处理。此段代码片断便是这个目的。
在上面的代码片段中,<security:authentication-manager>,*<security:authentication-provider>和<security:user-service>*用于身份验证。
<security:authentication-manager>用于绑定 UserDetailServices*即用户信息库检查,并获得用户的身份和授予的权限。而前面的<security:http>是指用于安全检查或授权。
这就是 Spring Security 的基础设置和配置部分。 下一篇我们将讲述一些 Spring Security 的高级内容
思考:
security:http 组件与 security:authentication-manager 组件的职责各是什么?
答:
security:http 主要用来配置权限与资源的对应配置,比如访问一个资源 url 的条件,是需要什么 role 才能访问。
而 security:authentication-manager 主要是用来处理登陆认证过程。比如:如
评论