使用JavaEE的ServerAuthModule模块和web.xml进行相应配置,实现对用户的权限控制
ServerAuthModule这里不细说,可以自行百度。
重点在注释:
<!-- 声明用于安全约束的角色 -->
<security-role>
<role-name>spx.main</role-name>
</security-role>
<security-role>
<role-name>spx.user</role-name>
</security-role> <security-constraint>
<web-resource-collection>
<!-- 这个名字是必须的,自定义,由工具使用,别的地方不使用 -->
<web-resource-name>all</web-resource-name>
<!-- 指定要受约束的资源,至少有一个。可以有多个. -->
<url-pattern>/*</url-pattern>
<!-- 指定受约束的方法
如果没有<http-method>元素,所有http方法都受到约束。
这里放置了POST方法,表示只有POST方法是受约束的。其他任何角色的人可以访问GET和其他的方法。
但不能访问POST方法,除非通过下面<auth-constraint>的验证。
-->
<http-method>POST</http-method>
</web-resource-collection>
<!-- auth-constraint为可选 -->
<!-- 如果没有<auth-constraint>表示所有角色都能访问POST方法,如果是<auth-constraint/>表示任何角色都不能访问POST方法 -->
<auth-constraint>
<!-- 可选。表示哪些角色能够在指定的资源上调用受约束的方法。这里表示只有拥有spx.user角色的人能够访问POST方法
角色与上面<security-role>里的<role-name>对应 -->
<role-name>spx.user</role-name>
</auth-constraint>
</security-constraint>
在项目中导入sam模块的jar包,将项目打成war包,放入JavaEE容器中,启动服务,如此就实现了一次URL级别的权限控制。
假设通过以上验证进入到了VerifyAuthModuleServlet的doPost方法中,
可以在doPost中加上以下
UserInfo userInfo = (UserInfo)req.getUserPrincipal();
来获取到用户信息。
还可以加上以下来判断用户是否拥有其他角色:
if(req.isUserInRole("spx.admin")) {
res.setStatus(200);
res.getWriter().print(hello);
return;
}
注意:"spx.admin"必须是web-app划分出来的角色中的一种,否则这里一直false。这里和@RolesAllowed("spx.main")有所区别,@RolesAllowed("spx.main")只需用户有该权限即可,
而没必要一定要存在于<security-role>中。
EJB中进行方法级别的权限判断
如以下无状态会话bean
@Stateless
public class HelloWorldBean implements HelloWorldLocal { private Logger logger = Logger.getLogger(HelloWorldBean.class.getName()); @EJB //采用注解方式
private Other other; @Resource
private SessionContext sessionContext; @RolesAllowed("spx.user")
public String sayHello(String name) { Principal principal = sessionContext.getCallerPrincipal();
logger.info("==========EJB============="+principal.getName()); return name+"说:你好世界!"+other.sayMe();
} }
@RolesAllowed判断请求的用户是否拥有此权限,如果拥有权限则可以进入方法体,不拥有则抛出EJBAccessException异常
try{
hello = helloWorldLocal.sayHello("jiangmeng");
}catch (EJBAccessException e){
res.setStatus(403);
res.getWriter().write("{\"err\":\"403 forbidden\"}");
}
我们可以通过捕获该异常,给客户端相应的提示。
而且我们注意到上面可以在EJB中通过SessionContext.getCallerPrincipal()来获取到用户信息。
使用JavaEE的ServerAuthModule模块和web.xml进行相应配置,实现对用户的权限控制的更多相关文章
- 基于.net mvc的校友录(五、web.config对的配置以及filter实现的权限控制)
web.config配置文件 此文件是整个系统的配置中心,它告诉iis服务器本网站需要哪些运行时环境,需要哪些环境,将要进行哪些操作,开发人员也会将一个常量性的数据放在此配置中,以备系统全局调用.此文 ...
- Spring中,applicationContext.xml 配置文件在web.xml中的配置详解
一.首先写一下代码结构. 二.再看web.xml中的配置情况. <?xml version="1.0" encoding="UTF-8"?> < ...
- SpringMVC(十六):如何使用编程方式替代/WEB-INF/web.xml中的配置信息
在构建springmvc+mybatis项目时,更常用的方式是采用web.xml来配置,而且一般情况下会在web.xml中使用ContextLoaderListener加载applicationCon ...
- javaWeb项目中Web.xml的基本配置
这个地址写的非常好 ,欢迎大家访问 Å:http://www.cnblogs.com/hxsyl/p/3435412.html 一.理论准备 先说下我记得xml规则,必须有且只有一个根节点,大小写敏感 ...
- 使用Spring时web.xml中的配置
使用Spring时web.xml中的配置: <?xml version="1.0" encoding="UTF-8"?> <web-app x ...
- web.xml 通过contextConfigLocation配置spring 的方式
部署到tomcat后,src目录下的配置文件会和class文件一样,自动copy到应用的 classes目录下 spring的 配置文件在启动时,加载的是web-info目录下的application ...
- web.xml常用元素配置
tomcat服务器: tomcat是一个WEB服务器,所有的j2ee WEB程序可以在此处运行. tomcat服务器是一个符合j2ee标准的WEB服务器.则J2ee的EJB程序无法在此处运行. 如果要 ...
- J2EE进阶(五)Spring在web.xml中的配置
J2EE进阶(五)Spring在web.xml中的配置 前言 在实际项目中spring的配置文件applicationcontext.xml是通过spring提供的加载机制自动加载到容器中.在web ...
- Struts在Web.xml中的配置及Struts1和Struts2的区别
(1)配置Struts的ActionServlet <servlet>元素来声明ActionServlet <servlet-name>元素:用来定义Servle ...
随机推荐
- android添加权限--eclipse
首先进入清单文件 2.点击下面的permissions----Add 3.选择Uses permission-----OK 4.选择需要的权限 5.查看代码,,已经添加完毕
- windows phone 8.1常用启动器实例
---恢复内容开始--- 小梦今天给大家分享一下windows phone 8.1常用启动器实例,包括: 电话启动器 短信启动器 邮件启动器 添加约会|备忘到日历 地图启动器 地图路线启动器 wind ...
- windows phone 8.1开发:触控和指针事件1
原文出自:http://www.bcmeng.com/windows-phone-touch/ UIElement类的触控事件: ManipulationStarting:当用户将手指放在 IsMan ...
- SQL Server--获取磁盘空间使用情况
对于DBA来说,监控磁盘使用情况是必要的工作,然后没有比较简单的方法能获取到磁盘空间使用率信息,下面总结下这些年攒下的脚本: 最常用的查看磁盘剩余空间,这个属于DBA入门必记的东西: -- 查看磁盘可 ...
- zookeeper + dubbo + spring boot
最近开始接触了分布式的一些东西,这里给自己作一个学习笔记. 这里只是做一个运行demo,具体的理论知识就不在这里阐述了. 1.zookeeper的安装与启动 下载地址:http://www.apach ...
- Yahoo前端优化十四条军规
相信互联网已经越来越成为人们生活中不可或缺的一部分.Ajax,flex等等富客户端的应用使得人们越加“幸福”地体验着许多原先只能在C/S实 现的功能. 比如Google机会已经把最基本的office应 ...
- 学习Jammendo代码的心路历程(一)简单的淡出效果实现
最近在看 Jammendo代码,打算将学习过程简单的记录下来,下面开始第一篇: 打开Jammendo运行之后,出弹出一个对话框,跳过对话框之后,会有一个淡出界面跳转到首页效果的实现.那么这个效果是怎么 ...
- 初识Object-C
Object-C是苹果推出用来开发苹果软件的一门编程语言.大学学了3年的JAVA,到了大四毅然决然的放弃JAVA,是因为第一次接触Object-C就被它的简单语法吸引了.其实不仅仅是语法简单,相对于A ...
- GitLab 客户端添加SSH KEY
一.生成公钥 先查看系统用户目录下是否有 .ssh 文件夹,如果有的话,那说明你之前已经生成过公钥,则可以跳过生成公钥. 运行下面的命令生成一个密钥: ssh-keygen -t rsa -C &qu ...
- Android 开发之错误整理 [2014-04-28 09:22:28 - XXXX] Unable to resolve target 'android-18'
在开发的时候难免会导入项目,那么怎么经常会遇到这个错误: [2014-04-28 09:22:28 - XXXX] Unable to resolve target 'android-18' targ ...