权限控制

权限概述

系统中有很多功能,这些功能并不是每一个登录的用户都能操作的,需要对用户操作系统的能力进行限制,该过程就叫权限

认证:系统提供的标识用户身份的功能(通常实现比如:登录)(告诉系统你是谁?)

授权:系统提供的根据用户的身份赋予其不同的操作系统能力功能(告诉系统你能做什么?)

系统启动 ---->web.xml|--->spring容器--->扫描Action Service Dao

|--->OAListener---->通过spring容器中的service加载权限数据

|

|--->struts过滤器 --->权限检验拦截器

用户请求    ------------> 加载struts.xml        |

<--------------跳转到权限不足界面---------检验通过执行action

权限模型

权限表:保存系统中所有的需要进行限制的功能,表名auth_function

角色表:权限关联的角色(比如业务员,总裁,经理,总监),auth_role

用户表:t_user

权限角色的映射表:role_function

角色用户的映射表:user_role

权限控制方式

url拦截控制方式(基于拦截器或过滤器)

方法注解控制方式

/**

* 登录

* @return

*/

public String login(){

//获取验证码

String checkcodeBySession = (String)

ServletActionContext.getRequest().getSession().getAttribute("key");

//校验验证码

if(StringUtils.isNoneBlank(checkcode) && checkcode.equals(checkcodeBySession)){

//验证码通过

//校验用户名和密码

//获取用户名和密码

String username = t.getUsername();

String password = t.getPassword();

if(StringUtils.isNoneBlank(username) && StringUtils.isNoneBlank(password)){

password = MD5Utils.md5(password);

//获取shiro的subject对象

Subject subject = SecurityUtils.getSubject();//未认证的用户对象

//创建用户名和密码令牌

AuthenticationToken authenticationtoken = new UsernamePasswordToken(username,password);

//根据用户对象调用login方法,调用安全管理器进行认证

try {

//登录成功

subject.login(authenticationtoken);

//获取当前用户

User user = (User) subject.getPrincipal();

ServletActionContext.getRequest().getSession().setAttribute("loginUser", user);

return "home";

} catch (Exception e) {

//登录失败

//用户名或密码有误!

this.addActionMessage(this.getText("error.usernameorpassword"));

e.printStackTrace();

}

return "login";

}else{

//用户名或密码有误!

this.addActionMessage(this.getText("error.usernameorpassword"));

return "login";

}

}else{

//验证码有误!

this.addActionMessage(this.getText("error.checknode"));

return "login";

}

}

import javax.annotation.Resource;

import org.apache.shiro.authc.AuthenticationException;

import org.apache.shiro.authc.AuthenticationInfo;

import org.apache.shiro.authc.AuthenticationToken;

import org.apache.shiro.authc.SimpleAuthenticationInfo;

import org.apache.shiro.authc.UsernamePasswordToken;

import org.apache.shiro.authz.AuthorizationInfo;

import org.apache.shiro.authz.SimpleAuthorizationInfo;

import org.apache.shiro.realm.AuthorizingRealm;

import org.apache.shiro.subject.PrincipalCollection;

import cn.itcast.bos.dao.IUserDao;

import cn.itcast.bos.domain.Function;

import cn.itcast.bos.domain.User;

import cn.itcast.bos.service.IFunctionService;

public class BosRealm extends AuthorizingRealm{

@Resource

private IUserDao userDao;

@Resource

private IFunctionService functionService;

@Override

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {

//获取当前登录用户

User user = (User) principalCollection.getPrimaryPrincipal();

//通过用户名查询用户权限

List<Function> list = functionService.findFunctionByUsername(user.getUsername());

//授权方法

SimpleAuthorizationInfo sai = new SimpleAuthorizationInfo();

if(null != list && list.size()>0){

for(Function function : list){

sai.addStringPermission(function.getCode());

}

}

return sai;

}

@Override

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {

//获取用户名和密码令牌

UsernamePasswordToken upt = (UsernamePasswordToken)authenticationToken;

//获取用户名和密码

String username = upt.getUsername();

//根据username查询用户

List<User> list = userDao.conditionQuery("findUserByUsername", username);

if(null != list && list.size()>0){

//返回到安全管理器中,安全管理器会校验密码

AuthenticationInfo ai = new SimpleAuthenticationInfo

(list.get(0), list.get(0).getPassword(), this.getClass().getSimpleName());

return ai;

}

return null;

}

}

时间: 2024-12-16 09:23:52

权限控制的相关文章

rbac 权限控制

RBAC 的控制,大致是通过将角色的权限控制,来控制用户的权限. 需要构建的表为 用户表(user) ,角色表(role),节点表(node),三张主表 , 节点表内记录的是所有的权限和方法. 2张关联表,是为了关联3张数据表的,分别未 角色用户表(user_role),角色权限表(role_node),也可将两张表写成字段分别加入到用户表和权限表内; 废话不多说看下,键表语句如下 用户表: CREATE TABLE `wj_admin` ( `id` int(11) NOT NULL AUTO

译-BMC Remedy Action Request System权限控制概述

原文链接:Access control overview 说明: BMC Remedy Action Request System是BMC ITSM产品平台,简称AR 或者Remedy,可实现基于ITIL标准的整个IT管理流程的实施定制.该平台可实现多种权限级别的管理,包括人员.组.角色,以及表.字段.行级别等.本文可以用作其他对权限要求比较精细的系统参考. 为了便于理解,部分名词翻译如下: Server:服务器Form (or table):表单Field (or column):字段Acti

基于MVC4+EasyUI的Web开发框架形成之旅--权限控制

我在上一篇随笔<基于MVC4+EasyUI的Web开发框架形成之旅--框架总体界面介绍>中大概介绍了基于MVC的Web开发框架的权限控制总体思路.其中的权限控制就是分为"用户登录身份验证"."控制器方法权限控制"."界面元素权限控制"三种控制方式,可以为Web开发框架本身提供了很好用户访问控制和权限控制,使得用户界面呈现菜单.Web界面的按钮和内容.Action的提交控制,均能在总体权限功能分配和控制之下. 本篇文章主要细化这三个方面

Orchard 之:Widget,兼看 Layer 在权限控制中的作用

一:Widget 可以理解为控件,可以直接被页面所引用.行为类似与分部页面,比如,我们可以创建一个 商品列表 Widget,然后这个 Widget 就可以被很多页面所引用. 理解 Widget 这个概念,我们不得不理解另外两个概念: 1:Layer Orchard 默认有这么几个层,Default.Authenticated.Anonymous.Disabled.TheHomepage.Layer 用于承载什么时候 Widget 将会被展现,这么讲大家一定觉得很抽象,其实 Layer 存在的意义

SpringMVC + Mybatis + SpringSecurity(权限控制到方法按钮) + Rest(服务) + Webservice(服务) + Quartz(定时调度)+ Lucene(搜索引擎) + HTML5 bootstrap + Maven项目构建绝对开源平台

框架整合: Springmvc + Mybatis + Shiro(权限) + REST(服务) + WebService(服务) + JMS(消息) + Lucene(搜搜引擎) + Quartz(定时调度) + Bootstrap Html5(支持PC.IOS.Android) 需要源码请加Q:3121026417   此处[源码获取地址] 框架简介: 项目Maven构建,真实大型互联网架构,做到高并发,大数据处理,整个项目使用定制化服务思想,提供模块化.服务化.原子化的方案,将功能模块进行

CloudStack API访问权限控制

在我写开始之前,请先看下CS中国社区的一篇文章http://www.cloudstack-china.org/2012/12/1465.html,在第1点里讲了关于权限级别,command属性文件位置等问题.不过4.3现在的除了command.properties外,作者提到的其它properties文件现在好像都没有了,而且command里面现在形如***command=15,"="后面不再有处理请求命令的类. API请求由ApiServlet拦截后,会调用verifyRequest

使用JavaEE的ServerAuthModule模块和web.xml进行相应配置,实现对用户的权限控制

ServerAuthModule这里不细说,可以自行百度. 重点在注释: <!-- 给web-app划分角色 --> <security-role> <role-name>spx.main</role-name> </security-role> <security-role> <role-name>spx.user</role-name> </security-role> <!-- 只有配置

springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】

项目结构: 1.maven项目的pom中引入shiro所需的jar包依赖关系 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <dependency>     <groupid>javax.servlet</groupid>     javax.servlet-api</artifactid>     <version>3.0.1</version>

Java成员的访问权限控制

Java中的访问权限控制包含两个部分: 类的访问权限控制 类成员的访问权限控制 对类来说,访问权限控制修饰符可以是public或者无修饰符(默认的包访问权限): 对于类成员来说,访问权限控制修饰符可以是public,protected, package private(无修饰符), or private. 以下表格总结了类成员中不同访问权限控制修饰符对应的访问级别: