Spring Security控制权限

Spring Security控制权限

1,配置过滤器

为了在项目中使用Spring Security控制权限,首先要在web.xml中配置过滤器,这样我们就可以控制对这个项目的每个请求了。

<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>

2,使用命名空间

在ApplicationContext.XML中配置或者另外单独使用一个Security.XML都可以,我们这里使用单独的xml来对Security进行配置.

<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-3.0.xsd               http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> < /beans>

我们通常使用"security"作为默认的命名空间,而不是"beans",这意味着我们可以省略所有security命名空间元素的前缀,使上下文更容易阅读

<beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="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-3.0.xsd               http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> < /beans:beans>

3,配置认证提供接口和用户信息(这里使用内存用户)

<global-method-security pre-post-annotations="enabled">

</global-method-security>

<http use-expressions="true" access-denied-page="/AccessDenied.jsp">

<intercept-url pattern="/**" access="hasRole(‘ROLE_USER‘)" />

<form-login />

</http>

<authentication-manager>

<authentication-provider>

<user-service>

<user name="rod" password="rod"

authorities="ROLE_SUPERVISOR, ROLE_USER, ROLE_TELLER" />

</user-service>

</authentication-provider>

</authentication-manager>

<beans:bean id="loggerListener"

class="org.springframework.security.authentication.event.LoggerListener" />

这里配置pre-post-annotations="enabled"可以在接口函数(必须在接口中声明)/页面使用标签/表达式进行权限判断

  • 如下表达式要求用户必须具备ROLE_SUPERVISOR角色才能调用

import org.springframework.security.access.prepost.PreAuthorize;

import sshDemo.Entities.*;

public interface IOwnerService {

@PreAuthorize("hasRole(‘ROLE_SUPERVISOR‘)")

public List<Owners> getOwners();

}

表达式基于

org.springframework.security.access.expression.SecurityExpressionRoot类提供权限判断.

  • 另外也可以在页面中使用授权标签如下的sec:authorize要求具备ROLE_SUPERVISOR或者ROLE_TELLER才能使用该链接.

<%@taglib prefix="s" uri="/struts-tags"%>

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

<sec:authorize access="hasAnyRole(‘ROLE_SUPERVISOR‘,‘ROLE_TELLER‘)">

<a href="<s:url action=‘listAction‘/>">List</a>

</sec:authorize>

security:authorize 标签声明下面的属性:

  • ifAllGranted:这个标签列出的所有角色必须授权,才能输出标签的内容。
  • ifAnyGranted:任何一个这个标签列出的角色必须授权,才能输出标签的内容。
  • ifNotGranted:这个标签列出的角色没有一个是授权的,才能输出标签的内容。

标签sec:authorize的使用

authorize标签判断顺序是: access->url->ifNotGranted->ifAllGranted->ifAnyGranted 但他们的关系是“与”: 即只要其中任何一个属性不满足则该标签中间的内容将不会显示给用户,举个例子:

<sec:authorize  ifAllGranted=”ROLE_ADMIN,ROLE_MEMBER” ifNotGranted=”ROLE_SUPER”>满足才会显示给用户 </sec:authorize>

标签中间的内容只有在当前用户拥有ADMIN,MEMBER角色,但不拥有SUPER权限时才会显示

满足ifAllGranted: 只需要grantedAuths.containsAll(requiredAuths);返回true即可
满足ifAnyGranted: 只需要grantedAuths.retainAll(requiredAuths);有内容即可(两集合有交集)
满足ifNotGranted:与Any相反,如果没有交集即可

3,使用自定义登陆页面

创建login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%>

<html>

<head>

<base href="<%=basePath%>">

<title>Login</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

</head>

<body>

<c:if test="${param.error}">

<font color="red"> Your login attempt was not successful, try

again.<br />

<br />

Reason: <c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}"/>.

</font>

</c:if>

<form action="${pageContext.request.contextPath}/j_spring_security_check" style="width:260px;text-align:center;" method="post">

<fieldset>

<legend>登陆</legend>

用户: <input type="text" name="j_username" style="width:150px;" value="${sessionScope[‘SPRING_SECURITY_LAST_USERNAME‘]}"/><br />

密码: <input type="password" name="j_password" style="width:150px;" /><br />

<input type="checkbox" name="_spring_security_remember_me" />两周之内不必登陆<br />

<input type="submit" value="登陆"/>

<input type="reset" value="重置"/>

</fieldset>

</form>

</body>

</html>

配置登陆界面

<http>

...

<form-login login-page="/login.jsp"

authentication-failure-url="/login.jsp?error=true"

default-target-url="/" />

...

</http>

4,配置退出操作

在页面中添加退出操作

<a href="j_spring_security_logout">Logout</a>

配置退出操作

<http>

...

<logout logout-success-url="/login.jsp" />

...

</http>

5,配置访问拒绝操作

创建访问拒绝页面

<%@page contentType="text/html; charset=GBK" %>

<html>

<head></head>

<body>

<div id="header"></div>

<div id="content" style="width: 60%">

<strong>Access Denied</strong>

</div>

</body>

</html>

配置访问拒绝重定向页面

<http access-denied-page="/AccessDenied.jsp">

...

</http>

6,运行调试

注意事项:

1,如果跟Struts2结合使用需要将spring security的配置放在struts2前面防止struts2将相应的处理截取出现如下错误:

Q:为何登录时出现There is no Action mapped for namespace / and action name j_spring_security_check.

A:这是因为登陆所发送的请求先被struts2的过滤器拦截了,为了试登陆请求可以被Spring Security正常处理,需要在web.xml中将Spring Security的过滤器放在struts2之前。

2,Struts结合Spring Security使用时出现Access Denied但是没有跳到对应的AccessDenied.jsp页面.

Q:Access Denied但是没有跳到对应的AccessDenied.jsp页面.

A:解决方法还没有

时间: 2024-10-10 15:04:35

Spring Security控制权限的相关文章

Spring MVC、Mybatis、Hibernate、Bootstrap、HTML5、jQuery、Spring Security安全权限、Lucene全文检索、Ehcache分布式缓存 、高性能、高并发【Java企业通用开发平台框架】

功能特点: 1.适配所有设备(PC.平板.手机等),兼容所有浏览器(Chrome.Firefox.Opera.Safari.IE6~IE11等),适用所有项目(MIS管理信息系统.OA办公系统.ERP企业资源规划系统.CRM客户关系管理系统.网站.管理后台等). 2.快速开发,敏捷的数据持久层解决方案. 2.1.事务自动处理. 2.2.O/R Mapping基于注解,零配置XML,便于维护,学习成本低. 2.3.接口和实现分离,不需写数据持久层代码,只需写接口,自动生成添加.修改.删除.排序.分

使用Spring Security实现权限管理

使用Spring Security实现权限管理 1.技术目标 了解并创建Security框架所需数据表 为项目添加Spring Security框架 掌握Security框架配置 应用Security框架为项目的CRUD操作绑定权限 2.权限管理需求描述 为系统中的每个操作定义权限,如定义4个权限: 1)超级权限,可以使用所有操作 2)添加影片权限 3)修改影片权限 4)删除影片权限 为系统设置管理员帐号.密码 为系统创建权限组,每个权限组可以配置多个操作权限,如创建2个权限组: 1)"Admi

spring security控制session

spring security控制session本文给你描述在spring security中如何控制http session.包括session超时.启用并发session以及其他高级安全配置. 创建session时机我们可以准确地控制什么时机创建session,有以下选项进行控制: always – 如果session不存在总是需要创建: ifRequired – 仅当需要时,创建session(默认配置): never – 框架从不创建session,但如果已经存在,会使用该session

spring security 控制用户信息用户加密 缓存用户信息

1. MD5加密 任何一个正式的企业应用中,都不会在数据库中使用明文来保存密码的,我们在之前的章节中都是为了方便起见没有对数据库中的用户密码进行加密,这在实际应用中是极为幼稚的做法.可以想象一下,只要有人进入数据库就可以看到所有人的密码,这是一件多么恐怖的事情,为此我们至少要对密码进行加密,这样即使数据库被攻破,也可以保证用户密码的安全. 最常用的方法是使用MD5算法对密码进行摘要加密,这是一种单项加密手段,无法通过加密后的结果反推回原来的密码明文. 首先我们要把数据库中原来保存的密码使用MD5

jQuery、HTML5、Spring Security安全权限、Lucene全文检索

获取[下载地址]   QQ: 313596790   [免费支持更新]支持三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]A 代码生成器(开发利器);      增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid

Bootstrap、jQuery、HTML5、Spring Security安全权限

获取[下载地址]   QQ: 313596790   [免费支持更新]A 代码生成器(开发利器);全部是源码     增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势C 安全权限框架shiro ;  Shiro 是一个用

Spring MVC、Mybatis、Hibernate、Bootstrap、jQuery、HTML5、Spring Security安全权限、Lucene全文检索、Ehcache分布式缓存 、高性能、高并发【Java企业通用开发平台框架】

获取[下载地址]   QQ: 313596790   [免费支持更新] A 代码生成器(开发利器);    B 阿里巴巴数据库连接池druid;   数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势 C 安全权限框架shiro ;  D ehcache 自定义二级缓存; E 微信接口开发(后续会加入Activiti5 工作流 )免费升级 -------------------------------------------------------

Spring Security 用于权限管理。

1:添加依赖: <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity4</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifac

Spring Security教程系列(一)基础篇

第 1 章 一个简单的HelloWorld 第 1 章 一个简单的HelloWorld Spring Security中可以使用Acegi-1.x时代的普通配置方式,也可以使用从2.0时代才出现的命名空间配置方式,实际上这两者实现的功能是完全一致的,只是新的命名空间配置方式可以把原来需要几百行的配置压缩成短短的几十行.我们的教程中都会使用命名空间的方式进行配置,凡事务求最简. 1.1. 配置过滤器 为了在项目中使用Spring Security控制权限,首先要在web.xml中配置过滤器,这样我