`
qq543123909
  • 浏览: 25848 次
社区版块
存档分类
最新评论

Spring Security 学习(5)

阅读更多

这篇主要的内容 

Spring Security 保护业务代码的执行

 

准备工作 .

1.创建HelloService接口

package zyk.service;

//import org.springframework.security.access.annotation.Secured;

public interface HelloService {

	//@Secured({ "ROLE_USER", "ROLE_ADMIN" })
	public String sayHi(String userName);

	//@Secured({"ROLE_ADMIN"})
	public String sayBye(String userName);
}

 

2.实现类HelloServiceImpl

package zyk.service.impl;

import zyk.service.HelloService;

public class HelloServiceImpl implements HelloService {

	public String sayHi(String userName) {
		return "大家好!我是:" + userName;
	}

	public String sayBye(String userName) {
		return userName + " 跟大家说再见!";
	}

}

 

3.配置applicationContext.xml 使HelloService 交给Spring 管理.

<bean id="helloService" class="zyk.service.impl.HelloServiceImpl" />

 

4.创建 HelloServlet

package zyk.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import zyk.service.HelloService;

public class HelloServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Constructor of the object.
	 */
	public HelloServlet() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 * 
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=UTF-8");
		response.setCharacterEncoding("UTF-8");
		String userName = request.getParameter("userName");
		String method = request.getParameter("method");
		ApplicationContext ctx = WebApplicationContextUtils
				.getWebApplicationContext(this.getServletContext());
		HelloService helloService = ctx.getBean("helloService",
				HelloService.class);
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE></TITLE></HEAD>");
		out.println("  <BODY>");
		if (method.equals("sayHi")) {
			out.println(helloService.sayHi(userName));
		} else {
			out.println(helloService.sayBye(userName));
		}
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

	/**
	 * The doPost method of the servlet. <br>
	 * 
	 * This method is called when a form has its tag value method equals to
	 * post.
	 * 
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

	/**
	 * Initialization of the servlet. <br>
	 * 
	 * @throws ServletException
	 *             if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}

}

 

5.在web.xml 中配置 HelloServlet 的映射路径. 

  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>zyk.servlet.HelloServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/hello.action</url-pattern>
  </servlet-mapping>

 

6.在Index.jsp 中添加链接. 

	<a href="${pageContext.request.contextPath}/hello.action?method=sayHi&userName=<sec:authentication property="name" />">SayHi!</a> 
	<br />
	<a href="${pageContext.request.contextPath}/hello.action?method=sayBye&userName=<sec:authentication property="name" />">SayBye!</a>

 

 

第一次测试  User 和 admin 均可以调用 SayHi 和 SayBye 方法.

接下来 要实现的是 

admin 可以 调用 SayHi 和 SayBye 方法.

user  只能 调用 SayHi 方法..

 

A)使用XML的方式

1.在applicationContext.xml 中 配置 

	<!-- XML 的方式 -->
	<security:global-method-security>
		<!--  拥有ROLE_USER或者ROLE_ADMIN 权限的用户 可以访问 包 zyk.service 下的任意个类 里 返回值类型为任意类型 并 方法名为sayHi 的方法-->
		<security:protect-pointcut access="ROLE_USER,ROLE_ADMIN" expression="execution(* zyk.service.*.sayHi(..))"/>
		<!-- 第一个* :表示返回任意类型
			  第二个 * :表示任意的类
			 第三个* : 以say开头的任意方法	名
			 对应的是 : 拥有ROLE_ADMIN 权限的用户 可以访问 包 zyk.service 下的任意个类 里 返回值类型为任意类型 并以say开头的方法 (例如 sayHi 和 sayBye)
		 -->
		<security:protect-pointcut access="ROLE_ADMIN" expression="execution(* zyk.service.*.say*(..))"/>
	</security:global-method-security>

 

第二次测试 Ok 。将上面的配置注释掉.换用Annotation 的方式 .

 

B)使用Annotation的方式

 

1.启用Annotation  配置applicationContext.xml

	<!-- 启用annotation -->
	<security:global-method-security
		secured-annotations="enabled" jsr250-annotations="enabled" />

 

 2.给HelloService接口里的方法加上 SpringSecurity的注解.用法很明显.

package zyk.service;

import org.springframework.security.access.annotation.Secured;

public interface HelloService {

	@Secured({ "ROLE_USER", "ROLE_ADMIN" })
	public String sayHi(String userName);

	@Secured({"ROLE_ADMIN"})
	public String sayBye(String userName);
}

 再次测试 Ok。

 

到此学习的资料 全部来自第一篇下的附件.《一步一步教你使用SpringSecurity》

 

 

 

 

 

 

1
0
分享到:
评论
1 楼 futhead 2014-01-13  
您好,能发一份保护业务代码执行的Demo吗?这个我试了好多遍,不管是User还是admin,都能随意访问,换了3.1也一样,不知道哪里出问题了。
邮箱futhead@civilnet.cn,非常感谢!

相关推荐

    springsecurity学习笔记

    在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...

    最详细Spring Security学习资料(源码)

    Spring Security是一个功能强大且高度可定制的身份验证和授权框架,专门用于保护Java应用程序的安全性。它构建在Spring Framework基础之上,提供了全面的安全解决方案,包括身份验证、授权、攻击防护等功能。 Spring...

    SpringSecurity学习总结源代码

    SpringSecurity是Java开发中用于构建安全Web应用的框架,它提供了强大的身份验证、...在学习过程中,分析提供的源代码和示例将有助于深入理解SpringSecurity的工作原理,并能帮助你在实际项目中有效地应用这些知识。

    spring security学习资料

    spring security方面的学习资料,包含:Spring+Security+3+与+CAS单点登录配置;Spring+Security3中文教程;Spring-Security安全权限管理手册;Spring+Security文库;还有一个学习笔记!

    Spring Security 资料合集

    Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理,它为Web应用和企业级应用提供了全面的...通过学习这些文档,开发者可以更好地理解Spring Security的工作原理,从而更有效地实现应用的安全控制。

    SpringSecurity.pdf

    Spring Security的学习过程可以分为入门、进阶和高级三个阶段。入门阶段主要是了解Spring Security的基本概念和配置方法。进阶阶段需要深入学习如何定制认证和授权流程、如何集成各种认证方式以及如何在实际项目中...

    Spring Security 学习总结1_3

    "springsecurity-namespace"可能指的是Spring Security的XML命名空间配置。在Spring Security的早期版本中,使用XML配置是最常见的实践。例如,你可能会看到以下片段: ```xml **" access="hasRole('ROLE_ADMIN')...

    SpringSecurity学习

    首先,Spring_Security-3.0.1_中文官方文档(翻译版).pdf是学习SpringSecurity的重要资源,它包含详细的框架介绍、配置指南和使用示例。这份文档会帮助我们理解SpringSecurity的基础架构,如安全上下文、过滤器链和...

    SpringSecurity笔记,编程不良人笔记

    SpringSecurity是Java领域中一款强大的安全框架,主要用于Web应用程序的安全管理。它提供了全面的身份验证、授权、会话...通过深入学习和实践,我们可以更好地掌握SpringSecurity,为我们的应用构建坚固的安全防线。

    spring security 完整项目实例

    Spring Security 是一个强大的安全框架,用于为Java应用提供身份验证和授权服务。在这个完整的项目实例中...通过学习和实践这个项目,开发者能够深入理解Spring Security的工作原理,从而更有效地保护自己的Java应用。

    Spring Security-3中文官方文档(及教程)

    5. **CSRF防护**:为了防止跨站请求伪造攻击,Spring Security提供了内置的CSRF保护,通过生成和验证CSRF令牌来确保只处理来自合法源的请求。 6. **记住我功能**:Spring Security支持“记住我”功能,允许用户在一...

    spring security 官方文档

    Spring Security 是一个强大的安全框架,用于为Java应用提供全面的安全管理解决方案。它是Spring生态系统的组成部分,...无论你是初学者还是经验丰富的开发者,官方文档都是学习和掌握Spring Security不可或缺的资源。

    Shiro+Spring Security学习文档

    5. **OAuth2支持**:对于现代Web应用,Spring Security还提供了OAuth2的支持,用于第三方应用的授权。 6. **Web安全**:防止CSRF攻击、XSS防护、Session Fixation等Web安全问题。 结合这两个框架的学习,你可以...

    spring security 4.0.0所需jar包

    - `spring-security-core-4.0.0.CI-SNAPSHOT-sources.jar`:提供源代码,便于深入学习和调试。 - `spring-security-core-4.0.0.CI-SNAPSHOT.jar`:核心模块的主要库,包括安全性元数据、认证、授权和访问决策管理...

    spring security 3.1学习资料 及 附件下载

    《Spring Security 3.1 学习指南及资源解析》 Spring Security是Java平台上的一款强大且高度可定制的安全框架,广泛应用于企业级Web应用的安全管理。本篇文章将围绕"Spring Security 3.1"这一主题,深入探讨其核心...

    Spring Security OAuth2.0学习笔记.zip

    Spring Security OAuth2.0学习笔记 什么是认证、授权、会话。 Java Servlet为支持http会话做了哪些事儿。 基于session认证机制的运作流程。 基于token认证机制的运作流程。 理解Spring Security的工作原理,Spring ...

    spring security 学习总结文档

    【Spring Security 学习总结】 Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于保护基于 Java 的应用程序。本学习总结文档主要针对初学者,旨在剖析一个不安全的应用程序并阐述如何通过 ...

    spring_security_3.1

    5. **CSRF(跨站请求伪造)防护**:Spring Security 3.1默认提供了对CSRF攻击的防护,通过生成和验证CSRF令牌来确保只有合法的请求被处理。 6. **Remember Me服务**:此特性允许用户在一段时间内无需重新登录。...

Global site tag (gtag.js) - Google Analytics