ssh权限收集一
它算是一个比较大的项目(省级高速公路路政工作平台),大的划分可以分为10个大模块26个子模块,具体分为基本信息维护、路政案件、路政审批等等大模块;权限主要是(对某一模块的维护、浏览以及打印等)
经过讨论我们在设计权限的时候是这样考虑的:
分为三个“角色”:用户、用户组、权限;
他们的关系为:用户属于某个用户组;权限下放到用户组。(这一切都是和“当场客户代表”共同讨论决定的。)
如下表是权限的内容:
rightID |
rightName |
00100 |
维护基本信息 |
00101 |
浏览基本信息 |
00500 |
维护路产信息 |
00501 |
浏览路产信息 |
…… |
…… |
其中系统模块用xml配置,如:
module_config.xml
<?xml version="1.0" encoding="UTF-8"?>
<module-config>
<module>
<name>维护基本信息</name>
<right>00100</right>
</module>
<module>
<name>维护路产信息</name>
<right>00500</right>
</module>
……
</module-config>
(采用单例模式在容器启动的时候进行解析)
把具体的权限绑定到每一个*.do请求:
request_source.xml
<?xml version="1.0" encoding="UTF-8"?>
<request_source>
<request>
<url>useradmin.do</url>
<desc>显示用户信息维护主页面</desc>
<right>00100</right>
</request>
……
</request_source>
(也是在容器启动的时候解析并放到容器中)
系统中权限流程控制基本上我把它分为两个步骤:
1. 利用filter以及JAAS来进行非法用户的过滤
其中所有的*.JSP也要通过*.do来引导,这样就能确保整个系统中没有权限“盲点”,也即可以保证每一个*.do都是“干净的”。
这其中涉及到以下几个文件,具体的代码在此不给出:
(1)iRoadLogin.config
IRoadLogin{
com.ifreeway.iroad.security.DataBaseLoginModule required debug=true;
};
这个文件在创建LoginContext对象的时候根据这个文件来确定该加载哪个LoginModule对象。
(2)ParseRequestFilter.java
对每一个请求进行非法用户的过滤。
(3)DataBaseLoginModule.java
(4)SimpleCallbackHandler.java
上边的几个类的介绍涉及过多的JAAS核心类的内容,建议阅读下面连接的内容:
http://www.yesky.com/20030114/1648365.shtml这篇文章对于你了解JAAS绝对有帮助,你也可以通过我的站点来阅读更多的JAAS资料: http://plateau.sicool.com
2. 2. 在确保是合法用户(已经通过1。的过滤的用户)请求*.do的时候再来判断该用户是否拥有请求该do的权利。
可以在每个action的父类BaseAction中创建一个方法来判断是否合法,如:
public Boolean validateRight(String _request_do) throws ErrorRequestException{
//取得user所在的组:a
//根据_request_do,假设其为:useradmin.do
//获得其所在的组:b
//然后根据两次组(a 和 b)是否是同一组来判断该请求是否合法
//此时的a和b都是很容易在容器中获得的,不会损失效能。
}
前提:项目中的又一个公共的BaseAction,其他的action都要继承它。这一点我想使用struts开发项目的开发员都是很容易理解的。
如:有一个UserAdminAction.java
那么在这个执行它的时候首先调用validateRight(“useradmin.do”)来进行权限判断,如果返回false,那么跳转到error页。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!