IAM升级身份与访问管理(MVC)

简介: IAM升级身份与访问管理(MVC)

首先,关于IAM的详细介绍,网上比比皆是,我这里就不一一阐述了,可以借鉴部分文章

例如:

我这里这次升级的是旧的项目,SSI一个很老的项目了,因为一些核心的代码都是在这个里面,一直都是将就着用,后续的话肯定也是会更新迭代或者下线的。

废话不多说,我们看下IAM的一些简单的配置

我这边是把IAM对应的一些方法,调用整合在了一起,打包成了一个jar。主要就是搭建IAM的对应的应用了。升级的话还是比较简单的,看对应的应用需要什么结果

IAM认证通过,就返回对应的参数数据。

结构如下。

代码示例

package cn.axa.common;
 
import cn.axa.entity.User;
import cn.axa.utils.HttpClientUtilBasic;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
 
@Component
public class SecurityHelper
{
  private static final String ANONYMITY = "anonymity";
  private static final String COMMON_ACCOUNT_TYPE = "COMMON_ACCOUNT_TYPE:";
  private static final Map<String, String> REMOTE_URL = new HashMap();
 
  @Value("${oauth2.interface.client.id:app}")
  private String clientId;
 
  @Value("${oauth2.interface.client.secret:secret}")
  private String clientSecret;
 
  @Value("${DISCONF_ENV:sit}")
  private String env;
 
  public static Authentication getUserDetails() { return SecurityContextHolder.getContext().getAuthentication(); }
 
 
  public User getUserInfo(String account, String accountType, String sysName)
    throws Exception
  {
    try
    {
      Map param = new HashMap();
      param.put("account", account);
      param.put("accountType", accountType);
      param.put("sysName", sysName);
      Object content = HttpClientUtilBasic.postGetUserInfo((String)REMOTE_URL.get(this.env), JSON.toJSONString(param), this.clientId, this.clientSecret);
      JSONObject jsonObject = JSONObject.parseObject(content.toString());
      return (User)JSON.toJavaObject(jsonObject.getJSONObject("data"), User.class);
    } catch (Exception e) {
      throw new Exception(e.getMessage());
    }
  }
 
  public static String getAccountType() {
    Authentication authentication = getUserDetails();
    for (GrantedAuthority auth : authentication.getAuthorities()) {
      if (auth.getAuthority().contains("COMMON_ACCOUNT_TYPE:")) {
        return auth.getAuthority().split(":")[1];
      }
    }
    return null;
  }
 
  public static List<String> getCurrentRole() {
    List roles = new LinkedList();
    Authentication authentication = getUserDetails();
    if (authentication != null) {
      for (GrantedAuthority ga : authentication.getAuthorities()) {
        roles.add(ga.getAuthority());
      }
    }
    return roles;
  }
 
  public static String[] getRoles() {
    List roles = new LinkedList();
    Authentication authentication = getUserDetails();
    if (authentication != null) {
      for (GrantedAuthority ga : authentication.getAuthorities()) {
        roles.add(ga.getAuthority());
      }
    }
    if (roles.size() != 0) {
      String[] roleArr = new String[roles.size()];
      for (int i = 0; i < roles.size(); i++) {
        roleArr[i] = ((String)roles.get(i));
      }
      return roleArr;
    }
    return null;
  }
 
  public static String getUserName()
  {
    Authentication authentication = getUserDetails();
    String username;
    String username;
    if (authentication != null)
      username = (String)authentication.getPrincipal();
    else {
      username = "anonymity";
    }
    return username;
  }
 
  static
  {
    REMOTE_URL.put("sit", "测试环境");
    REMOTE_URL.put("uat", "业务测试环境");
    REMOTE_URL.put("preprod", "预生产");
    REMOTE_URL.put("gray", "灰度");
    REMOTE_URL.put("prod", "生产");
  }
}

对于我现在升级的这个应用的话,是需要的账户权限以及对应账户的菜单权限CODE。

首先我们看下是如何集成

第一步:

引入jar        两种方式  pom文件 或者直接添加jar

<dependency>
<groupId>*****</groupId>
<artifactId>oauth-client-mvc</artifactId>
<version>1.1</version>
</dependency

第二步:

配置对应的参数

#应用首页地址

oauth2.access.url=应用首页地址

#客户端id

oauth2.clientId=项目名

#客户端密钥

oauth2.clientSecret=对应的秘钥

#SSO服务端地址

oauth2.region.url=https://sits.*****/ssooauth2

#oauth2.region.url=https://uats.*****/ssooauth2

#oauth2.region.url=https://*****

#oauth2.region.url=https://*****

#客户端应用自身域地址

oauth2.domain=*****

#应用放行地址(无需登录即可访问)

oauth2.ignore.url=["/healthcheck.do","/logout.do","/proxylogin.do"]

#客户端ID

oauth2.interface.client.id=项目名

#密钥

oauth2.interface.client.secret=秘钥

#应用环境

DISCONF_ENV=sit

#DISCONF_ENV=uat

#DISCONF_ENV=preprod

#DISCONF_ENV=prod

第三步:

web.xml配置Spring Security过滤器链

<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filterclass>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

第四步:

配置拦截器和包扫描地址

在servlet.xml中添加如下配置:

<context:component-scan base-package="包路径"/>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/配置要过滤的静态路径"/>
<bean class="cn.axa.common.AdminInterceptorOrHttpClient"></bean>
</mvc:interceptor>
</mvc:interceptors>

项目升级中遇到的问题

 

注意:

Spring- security-jar包需要>=4.2.5

后续会有升级对应的springboot  升级完成之后,中间遇到的一些问题难点。 我也会更新进来。

谢谢大家。


相关文章
|
Web App开发 前端开发 .NET
一起谈.NET技术,十步教你ASP.NET MVC2项目升级MVC 3 RC
  微软在10号发布了ASP.NET MVC3的发布候选版(RC:Release-candidate),该版本提供了Razor视图引擎的智能感知等功能,并同样具备Online许可。眼馋的同学是不是已经迫不及待的想将现有项目升级呢?这里我就将官方ReleaseNotes中的升级办法翻译总结一下,以方便那些不喜欢看罗里啰嗦的英文文档的广大同学。
1044 0
|
Web App开发 前端开发 .NET
一起谈.NET技术,如何将ASP.NET MVC2项目升级到MVC 3 RC
  微软在10号发布了ASP.NET MVC3的发布候选版(RC:Release-candidate),该版本提供了Razor视图引擎的智能感知等功能,并同样具备Online许可。眼馋的同学是不是已经迫不及待的想将现有项目升级呢?这里我就将官方ReleaseNotes中的升级办法翻译总结一下,以方便那些不喜欢看罗里啰嗦的英文文档的广大同学。
848 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
44 0
|
5天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
15 0
|
9月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
118 0
|
10月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
67 0
|
10月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
115 0
|
10月前
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
145 0
|
10月前
|
开发框架 缓存 JSON
ASP.NET Core MVC 从入门到精通之Filter
ASP.NET Core MVC 从入门到精通之Filter
120 0