day78_淘淘商城项目_11_实现SSO系统的登录注册功能 + 门户首页展示用户名 + ajax请求跨域问题详解_匠心笔记


课程计划

  • 1、SSO注册功能实现
  • 2、SSO登录功能实现
  • 3、通过token获得用户信息
  • 4、ajax跨域请求解决方案–jsonp

1、服务接口实现

  SSO系统就是解决分布式环境下登录问题的,本质上是解决分布式环境下session共享问题。

1.1、检查数据是否可用接口开发

检查数据是否可用作为注册功能的辅助。

1.1.1、功能分析

请求的url:/user/check/{param}/{type}
参数:从url中取参数
  1、String param(要校验的数据)
  2、Integer type(校验的数据类型)
响应的数据:json数据。TaotaoResult,封装的数据校验的结果为true:表示成功,数据可用,false:失败,数据不可用。
业务逻辑:
  1、从tb_user表中查询数据。
  2、查询条件根据传递过来的参数动态生成。
  3、判断查询结果,如果查询到数据就返回false。
  4、如果没有查询到数据就返回true。
  5、使用TaotaoResult包装,并返回。

1.1.2、Dao

  从tb_user表查询。属于单表查询,可以使用逆向工程生成的代码。

1.1.3、Service

先在taotao-sso-interface中定义接口UserRegisterService,
再在taotao-sso-service中写实现类。
参数:
  1、要校验的数据:String param
  2、数据类型:Integer type(1、2、3分别代表username、phone、email)
返回值:TaotaoResult
在taotao-sso-interface创建接口

/**
 * 用户注册管理接口
 * @author chenmingjun
 * @date 2018年12月3日 上午9:47:29
 * @version V1.0
 */
public interface UserRegisterService {
   
	/**
	 * 检查APP传过来的数据是否可用
	 * @param param 要校验的数据
	 * @param type 校验的数据类型
	 * @return
	 */
	TaotaoResult checkData(String param, Integer type);
}

在taotao-sso-service创建实现类

	@Autowired
	private TbUserMapper tbUserMapper;
	
	@Override
	public TaotaoResult checkData(String param, Integer type) {
   
		// 1、从tb_user表中查询数据
		TbUserExample example = new TbUserExample();
		Criteria criteria = example.createCriteria();
		// 2、查询条件根据传递过来的参数动态生成
		// 1、2、3分别代表username、phone、email
		if (type == 1) {
   
			criteria.andUsernameEqualTo(param);
		} else if (type == 2) {
   
			criteria.andPhoneEqualTo(param);
		} else if (type == 3) {
   
			criteria.andEmailEqualTo(param);
		} else {
   
			return TaotaoResult.build(400, "传递过来的是非法的参数");
		}
		// 执行查询
		List<TbUser> list = tbUserMapper.selectByExample(example);
		// 3、判断查询结果,如果查询到数据就返回false
		if (list == null || list.size() == 0) {
   
			// 4、如果没有查询到数据就返回true
			return TaotaoResult.ok(true);
		}
		// 5、使用TaotaoResult包装,并返回
		return TaotaoResult.ok(false);
	}
1.1.4、发布服务

先在taotao-sso-service工程中的pom.xml文件中配置对taotao-sso-interface的依赖,因为服务层发布服务要通过该接口,
再在taotao-sso-service工程中的applicationContext-service.xml文件中发布服务:

1.1.5、引用服务

需要在taotao-sso-web中实现。
先在taotao-sso-web工程中的pom.xml文件中配置对taotao-sso-interface的依赖,表现层调用服务要通过该接口,
在taotao-sso-web工程中的springmvc.xml文件中引用服务:

1.1.6、Controller

请求的url:/user/check/{param}/{type}
参数:从url中取参数
  1、String param(要校验的数据)
  2、Integer type(校验的数据类型)
请求的方法:get。
响应的数据:json数据。TaotaoResult,封装的数据校验的结果,true:成功;false:失败。

/**
 * 用户处理Controller
 * @author chenmingjun
 * @date 2018年12月3日 上午10:31:38
 * @version V1.0
 */
@Controller
public class UserController {
   
	
	@Autowired
	private UserRegisterService userRegisterService;

	@RequestMapping(value="/user/check/{param}/{type}", method=RequestMethod.GET)
	@ResponseBody
	public TaotaoResult checkData(@PathVariable String param, @PathVariable Integer type) {
   
		TaotaoResult result = userRegisterService.checkData(param, type);
		return result;
	}
}
1.1.7、测试

get请求好测试,直接在浏览器中输入URL即可。
访问地址:http://localhost:8088/user/check/zhangsan/1
浏览器报404错误,原因是:我们web.xml中配置的是拦截以“.html”为后缀的请求。
我们修改访问地址:http://localhost:8088/user/check/zhangsan/1.html
此时浏览器报406错误。原因如下图:

而且如果我们在请求后面加上“.html”的话,等于我们修改了接口开发文档,这是不行的。
正确的做法是要拦截不带后缀的请求,我们使用“/”即拦截所有请求,如下图所示:

下面我们详解406错误的形成原因?
答:当我们浏览器出现406错误时,90%的原因是因为没有导入jackson-core-2.4.2.jar这个包。10%的原因是我们请求的URL后缀是“.html”。为什么呢?
原因是:在springMVC中使用注解@ResponseBody,springMVC认为对于后缀是“.html”的URL请求,服务端返回的应该也是一个html页面。但是如果服务端返回的是一个java对象的话,那么浏览器不能将一个java对象转换成一个html对象,即就会报406错误。(这是一个大坑!

1.2、用户注册接口开发

1.2.1、功能分析


请求的url:/user/register
参数:表单的数据:username、password、phone、email
返回值:json数据。TaotaoResult。
接收参数:使用TbUser对象接收。
请求的方法:post
业务逻辑:
  1、使用TbUser接收提交的请求。
  2、补全TbUser其他属性。
  3、密码要进行MD5加密
  4、把用户信息插入到数据库中。
  5、返回TaotaoResult.ok()。

1.2.2、Dao

  可以使用逆向工程生成的代码。

1.2.3、Service

在taotao-sso-interface中定义接口UserRegisterService已经定义好了,我们直接添加方法即可。
再在taotao-sso-service中写实现类,我们已经定义好了,直接实现方法即可。
参数:TbUser
返回值:TaotaoResult
在taotao-sso-interface创建接口

	/**
	 * 用户注册
	 * @param tbUser 用户表
	 * @return
	 */
	TaotaoResult register(TbUser tbUser);
}

在taotao-sso-service创建实现类

	
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AD域单点登录(AD Domain Single Sign-On)是指在Active Directory(AD)环境中实现的一种身份验证机制,使用户只需进行一次登录,即可访问多个与AD域关联的应用程序和系统,无需重复输入用户名和密码。 在AD域单点登录中,用户首先登录到AD域控制器,获得一个安全令牌(ticket)。然后,在访问其他与AD域关联的应用程序时,这个安全令牌会被传递给应用程序,用于身份验证和授权。这样,用户只需要进行一次登录认证,就可以访问多个应用程序,提高了用户体验的同时也简化了用户管理和密码管理的工作量。 至于SSO实现方式,常见的有以下三种: 1. 基于身份提供商的SSO:用户使用身份提供商(IdP)提供的凭据进行登录,然后通过SAML(Security Assertion Markup Language)或OpenID Connect等协议将身份信息传递给各个应用程序。常见的身份提供商包括Okta、Azure AD等。 2. 基于代理服务器的SSO:通过在网络中部署代理服务器,将用户的登录凭据转发给各个应用程序。代理服务器充当了一个中介,负责将用户登录信息传递给应用程序,并将应用程序的响应返回给用户。常见的代理服务器包括CAS(Central Authentication Service)、Shibboleth等。 3. 基于统一认证服务的SSO:在企业内部建立一个统一认证服务,用户只需进行一次登录认证,即可访问企业内部的各个应用系统。统一认证服务会负责管理和验证用户的身份信息,并将凭据传递给各个应用系统。常见的统一认证服务包括AD FS(Active Directory Federation Services)、Shiro等。 关于域名分级,可以根据组织的需要和安全策略,将不同的应用程序划分到不同的域名下。例如,可以将内部应用程序划分到内部域名下,而将外部可访问的应用程序划分到公共域名下。这样可以提高安全性和管理灵活性,同时也便于用户对应用程序进行访问和识别。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值