java面试亮点技术

RSA非对称密码算法

RSA算法是一种非对称密码算法,前台需要一个公钥加密,后台需要私钥解密(所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密)。

我们做的这个平台属于互联网平台,面向的是互联网,所有也会导致一些安全的问题,我们在请求上一般来说只要是带参数的请求就要为post方式,这样不明文传输,但稍微懂一点技术的f12看一下post请求中携带的参数或者通过爬虫就可以看到,这时就会出现安全的一些问题,比如用户登录和一些关于重要信息操作的请求连接中的参数就会明文显示了,这时我们采用RSA公钥+私钥的非对称加密进行操作,前台参数在传递时通过js进行公钥加密传递,后台接受到参数后通过私钥解密,这时问题是解决了,但出现了一个问题,只要有请求加密了参数那处理该请求的方法中就要有解密的方法,这时业务逻辑和非业务逻辑的东西都混在了一起,非常不好,这时候我配置了一个过滤器Filter,将需要加密的请求全部过滤,用户发送请求只要是加密的就会被过滤器所过滤进行解密,解密完后将参数在通过Java反射机制动态赋值给springmvc处理器中的方法形参,从而做到后台解密与业务逻辑分开,这就是我们采用的rsa的加密方式

权限描述(RBAC+Shiro)

在数据库方面我们采用了RBAC(基于角色的访问控制)的设计,核心涉及到5张表。三张主表:用户、角色、资源,两张关系表:用户角色关系表、角色资源关系表。我们还使用了Apache的Shiro来做为安全框架,完成对权限的管理和控制。Shiro的核心就是Subject->SecurityManager->Realm,Subject是Shiro的对外(代码)核心API,Subject的所有交互都交由Security Manager(Security Manager才是实际的执行者)。Security Manager是Shiro的核心,是Shiro的核心安全控制器(类似Springmvc的dispatchServlet)。Realm简单的来说可以看做是一个安全数据源(进行用户有效性、权限、角色验证)。
===被问再说
shiro的配置流程
1、在web.xml中配置shiro的过滤器,过滤全部请求。
2、spring容器中需要配置和shiro过滤器一样名称的shiro过滤器工厂作为bean的Id。
3、同时引入securityManager和realm。
认证流程/登录流程
我们会在登录方法内通过SecurityUtil获得一个subject,根据用户输入的用户名密码生成一个UsernamePasswordToken,并调用subject.
login方法(调用login方法相当于subject去访问security manager)并把token传入。shiro的security manager会根据我们配置的自定义
realm(继承AuthorizingRealm)中的doGetAuthenticationInfo方法(参数是token的那个方法)进行用户的登录校验,并把认证结果返回(认证失败以抛异常的方式返回AuthenticationException[未认证异常])
分角色显示菜单
当用户登录时,根据用户名和密码到用户表验证信息是否合法,如果合法。则获取用户信息,之后根据用户id再到用户角色关联表中得到相关连的角色id集合,之后根据角色id再到角色权限关联表中获取该角色所拥有的权限id集合,然后再根据权限id集合到权限表(菜单表)中获取具体的菜单,展现给当前登录用户,从而达到不同用用户看到不同的菜单权限。
权限管理
我们通过ZTree来给角色赋权并且通过ZTree来展示菜单,以及通过ZTree来管 理菜单即增加和编辑菜单。
在后台的系统管理模块中包含用户管理,角色管理,菜单管理(资源管理),给用户授予角色、角色关联资源等操作。这样就建立起了用户和角色之间多对多的关系以及角色和权限之间多对多的关系。
shiro授权流程
当遇到需要授权的内容时,例如shiro的jsp标签,当解析到对应的标签时,shiro标签会自动包装成subject去访问security manager,security manager会根据realm中的doGetAuthorizationInfo方法内提供的权限/角色信息(权限或角色信息包装到SimpleAuthorizationInfo)来进行校验。校验失败会抛出UnauthorizedException(未授权异常)
shiro验证权限的方式(授权的方式)
1、jsp中可以使用shiro的校验标签,例如shiro:hasPermission。
2、可以给Controller对应的方法加入shiro注解,例如@RequiresPermissions。
3、自定义拦截器。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值