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

目录

首先我们看下是如何集成

第一步:

第二步:

第三步:

第四步:

项目升级中遇到的问题


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

例如:

零信任之从IAM概述到应用实现_H3C-Navigator的博客-CSDN博客

我这里这次升级的是旧的项目,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  升级完成之后,中间遇到的一些问题难点。 我也会更新进来。

谢谢大家。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一百减一是零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值