`
john.zhang
  • 浏览: 15462 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring security 的权限控制一

 
阅读更多

1. 搭建Spring security 环境.

1) spring 项目: 导入Spring 的两个Jar包, 加入 Spring 的配置文件(注总加入 security 命名空间)

2) 加入 Spring security 的一个 Jar包

3) 在 web.xml 文件中加信相关配置

1> 搭建 spring 环境

web.xml

 

	<!-- 搭建 spring 环境 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/classes/applicationContext*.xml</param-value>
	</context-param>
	
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

  

2> 加入 Spring security 框架的过滤器

web.xml

    <!-- 加入 spring-security 框架的过滤器 -->
    <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>

 

 

3> 在Spring 的配置文件中配置 Spring  security 的应用

 applicationContext-security.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	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-2.0.2.xsd">

	<!-- 配置 spring-security 的Http服务 -->
	<http auto-config="true">
		<!-- 哪些页面需要受到 spirng-sceurity 的保护, 以及访问这些页面的权限是什么 -->
		<intercept-url pattern="/index.jsp" access="ROLE_ADMIN, ROLE_USER" />
		<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
		<!-- 配置登出 -->
		<logout logout-url="/logoff" logout-success-url="/bye.jsp" invalidate-session="false" />
		<!-- 配置登录 -->
		<form-login login-page="/login.jsp" login-processing-url="/login"  default-target-url="/index_1.jsp" always-use-default-target="true" />
	</http>

	<!-- 配置 spring-security 的权限信息 -->
	<authentication-provider>
		<!-- 配置security 的用户信息 -->
		<user-service>
			<user name="user" password="user" authorities="ROLE_USER" />
			<user name="admin" password="admin" authorities="ROLE_ADMIN" />
		</user-service>
	</authentication-provider>

</beans:beans>

 

2. 用于测试的JSP页面

login.jsp 自定义的 登录界面

<html>
<head>
<title>Login Page</title>
</head>
<body onload='document.f.j_username.focus();'>
<h3>zhangq</h3>
	<form name='f' action='login' method='POST'>
	 <table>
	    <tr><td>User:</td><td><input type='text' name='j_username' value=''></td></tr>
	    <tr><td>Password:</td><td><input type='password' name='j_password'/></td></tr>
	    <tr><td><input type='checkbox' name='_spring_security_remember_me'/></td>
	    <td>Remember me on this computer.</td></tr>
	    <tr><td colspan='2'><input name="submit" type="submit"/></td></tr>
	    <tr><td colspan='2'><input name="reset" type="reset"/></td></tr>
	  </table>
	</form>
</body>
</html>

 

index-1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
    index page. <br>
    sessionid= <%=session.getId() %> <br>
    <!-- 如果权限不是 ROLE_ADMIN, 则不显示 admin.sjp 链接-->
    <security:authorize ifAllGranted="ROLE_ADMIN">
    	<a href="./admin.jsp"> admin.sjp</a>  <br><br>
    </security:authorize>
    <a href="logoff" >logoff</a>
  </body>
</html> 

 

 admin.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
    index page <br><br>
    <a href="./admin.jsp">admin.jsp</a> <br>
    SessionId=<%=session.getId() %><br>
    <a href="logoff" >logoff</a>
  </body>
</html>

bay.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body> 
    bye page. <br>
    SesionId=<%=session.getId() %><br>
    sessionIsNew=<%=session.isNew() %><br>
    <a href="login" >Login</a>
  </body>
</html>

  2. 关于 DelegatingFilterProxy:


 1). 是一个 Filter
 2). 将  HTTP 请求委托给 Spring 应用程序上下文中的一个 Bean, 默认情况下, DelegatingFilterProxy 会把 HTTP 请求委托给和它的 <filter-name> 属性相同的 Bean 上

 3. 配置登出:


 1). 通过 http 节点的 logout 子节点进行配置
 2). 默认的 url 为: j_spring_security_logout, 可通过 logout-url 属性修改默认的 url
 3). logout-success-url 属性配置成功登出重定向页面
 4). invalidate-session 属性配置是否销毁 session 

 

4. 配置登录:


 1). 通过 http 节点的 form-login 子节点进行配置
 2). login-page 属性配置指定的登录页面: 但是该表单页面不能随意的定义, 例如用户名, 密码. 而应使用 spring-security 的配置方式.
 3). login-processing-url 属性配置处理登陆页面的 url
 4). 若直接访问登录页面, 若登录成功, 则 spring-security 默认把页面重定向到 /index.jsp 页面. 若不存在该页面,或需要重定向到其他页面, 
      则需要配置 default-target-url 属性; 若访问受保护的页面, 则 spring-security 框架会把请求重定向到 login-page 属性指定的页面, 若登录成功
     spring-security 会把请求再重新定向到刚才请求的受保护的那个页面
 5). authentication-failure-url 配置登录失败的相应页面
 6). 若 always-use-default-target="true" 则只要登录成功, spring-security 都会把请求重定向到 default-target-url 属性指定的页面

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics