标签:请求 登录 验证 Service returnObject 用户 Controller user String
用户登录验证
具体实现:
1.1给登录按钮加一个绑定事件,但是不要写在html代码里,而是引入js,通过id与按钮进行绑定,位置写在入口函数
<button type="button" id = "loginBtn" class="btn btn-primary btn-lg btn-block" style="width: 350px; position: relative;top: 45px;">登录</button>
id = "loginBtn" 按钮的id
$(function (){
$("#loginBtn").click(function (){
函数内容
} 选择器通过id选择到按钮,给按钮添加点击事件
1.2在发起登录请求之前要做数据的校验(用户名不能为空,密码不能为空,当然了也可以是其他的校验方式,比如长度必须是多少才可以)
var loginAct = $.trim($("#loginAct").val()); trim是取出属性值的前后的空格
var loginPwd = $.trim($("#loginPwd").val());
var isRem = $("#isRem").prop("checked"); 获取值为”true“|”false“的组件的属性值的时候,使用.prop(”属性值“)
获取值为非”true“|”false“的组件的属性值的时候,使用.attr(”属性值“)
if(loginAct == ""){
alert("用户名不能为空")
return;
}
if(loginPwd == ""){
alert("密码不能为空")
return;
}
点击登录按钮之后,发起请求之前,要先做数据的校验,所以这部分代码是包含在点击事件里的,且在发请求之前
1.3根据响应的数据来判断是异步请求还是同步请求:这里响应的数据可能是json对象,也可能是html页面,所以选择发起异步请求
$.ajax({
请求的url命名规则:与被请求的资源的路径一致,但是名字不同
如:请求的资源是settings/qx/user/login.jsp,那么请求的url可以是settings/qx/user/Login.do,保证名字不同就可以了(/Login.do不同)
url:'settings/qx/user/Login.do',
data:{
loginAct:loginAct,
loginPwd:loginPwd,
isRem:isRem
},
type:'post',
dataType:'json', 规定接受数据的类型为json字符串
success:function (data){ data表示,后台返回的json字符串对象
if(data.code=="1"){ code表示是否登录成功,0是不成功,1是成功
window.location.href="workbench/index.do"; 登录成功则跳转到crm系统主界面
}else {
$("#msg").html(data.message) 失败的话,则将data里的message属性值,写到id为msg的span当中
}
}
})
1.4 Controller接受到前端发来的异步请求后,要获取前端参数,封装前端参数,调用Service层
注意:
1.前端发来请求后,开始等待后端执行完成,并返回json字符串
2.Controller层不处理业务,只返回视图
3.Controller层调用Service层,Service层处理业务,SqlSession对象由ioc管理,直接从从其中取出使用就行
4.Controller的命名规则是根据被访问资源所处在的目录命名,Service层也一样
5.@ResponseBody直接将实体类转化为json返回给前台
@Controller
public class UserController { Controller的命名规则是根据被访问资源所处在的目录命名,Service层也一样
@RequestMapping("settings/qx/user/Login.do") 请求的url命名规则:与被请求的资源的路径一致,但是名字不同
@ResponseBody
public Object Login(String loginAct, String loginPwd, String isRem, HttpServletRequest request) {
User user = userService.QueryUserByLoginActAndLoginPwd(loginAct, loginPwd); 没有封装参数,可有可无
ReturnObject returnObject = ReturnObjectUtils.getReturnObject(); 将要被序列化返回的对象
if (user == null) {
returnObject.setCode(Contants.RETURN_OBJECT_CODE_FAIL);
returnObject.setMessage("用户名或者密码错误");
} else{
if (DateUtils.DateToString(new Date()).compareTo(user.getExpireTime()) > 0) {
returnObject.setCode(Contants.RETURN_OBJECT_CODE_FAIL);
returnObject.setMessage("账号已过期");
} else if(user.getLockState().equals(Contants.RETURN_OBJECT_CODE_FAIL)) {
returnObject.setCode(Contants.RETURN_OBJECT_CODE_FAIL);
returnObject.setMessage("账号被锁定");
} else if(!user.getAllowIps().contains(request.getRemoteHost())){
returnObject.setCode(Contants.RETURN_OBJECT_CODE_FAIL);
returnObject.setMessage("Ip不合法");
}else {
returnObject.setCode(Contants.RETURN_OBJECT_CODE_SUCCESS);
}
}
return returnObject;
}
}
public interface UserService {
User QueryUserByLoginActAndLoginPwd(String LoginAct,String LoginPwd);
}
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper; SqlSession的创建就两个部分,加载核心配置文件生成sqlsession对象,加载mapper生成接口,一两部分都有ioc完成,生成的mapper代理对象的名字,是实体类对象名加上Mapper
@Override
public User QueryUserByLoginActAndLoginPwd(String LoginAct, String LoginPwd) {
return userMapper.selectUserByLoginAndUserPwd(LoginAct,LoginPwd);
}
}
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 必须注入属性dataSource -->
<property name="dataSource" ref="dataSource"/>
<!-- 如果mybatis没有特殊的配置(比如别名等),configLocation可以省去 ;否则,不能省略-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean> 这一部分完成加载mybatis核心配置文件
<!-- mapper注解扫描器配置,扫描@MapperScan注解,自动生成代码对象 -->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.projects.CRM.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean> 这一部分完成加载mapper接口,生成mapper代理类对象
开发顺序:
mapper接口+映射文件,完成dao层
Service层,处理业务,将处理结果返回给Controller层
Controller层,根据处理结果返回视图或者会写json或者字符串
前端接受到异步请求的响应过后,做出响应(打印错误信息或者跳转到新页面)
标签:请求,登录,验证,Service,returnObject,用户,Controller,user,String 来源: https://www.cnblogs.com/new228666/p/16441660.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。