小程序端页面的编写:
<form bindsubmit="formSubmit" bindreset="formReset">
<view class='title'>登录</view>
<view class='inp'>
<input type="text" name="username" value="{{username}}" placeholder="请输入账号" />
</view>
<view class='inp'>
<input class="inputText" type="password" name="password" value="{{password}}" password="true" placeholder="请输入密码" />
</view>
<view class='login-btn'>
<button class="btn1" type="primary" size="mini" form-type='submit'>
登录
</button>
</view>
</form>
formSubmit函数中定义var username和password接受从页面传过来的值, data数据以键值对的形式传入请求参数http://localhost:8081/Examination_System/wxlogin?username=admin&password=123,对就如你看到的这个链接后的参数,就是起到这样的作用。
formSubmit: function (e) {
// form 表单取值,格式 e.detail.value.name为小程序端输入的值(name为input中自定义name值)
var that = this;
var username = e.detail.value.username;
var password = e.detail.value.password;
//通过url链接调用后端接口wxlogin读取后端的用户名和密码
wx.request({
url: "http://localhost:8081/Examination_System/wxlogin",
data: {
'username': username,
'password': password,
},
method: "POST",
header: {
'content-type': 'application/x-www-form-urlencoded'//注意个人使用application/json获取不到数据
},
success: function (res) {//res.data.XXX是取到后端的数据如果和admin是等的就显示登录成功跳转的相应的小程序页面
if (res.data.role == "admin") {
wx.showToast({
title: '登录成功',
icon: 'success',
duration: 20000
})
setTimeout(function(){
wx.hideToast();
}),
wx.navigateTo({
url: '/pages/admin/admin/index?username=' + res.data.username,
})
} else {
wx.showToast({
title: '账号或密码错误',
icon: 'loading',
duration: 2000
})
}
}
})
}
SSM框架的controller层,编写用户登录的wxlogin接口,用map集合封装,小程序端取数据res.data.map集合中的属性值
@RequestMapping(value = "/wxlogin", method = {RequestMethod.POST,RequestMethod.GET})
@ResponseBody
public Map<String,String> wxlogin(Userlogin userlogin, Model model) throws Exception{
//Shiro实现登录
Map<String,String> map = new HashMap<String, String>();
UsernamePasswordToken token = new UsernamePasswordToken(userlogin.getUsername(),
userlogin.getPassword());
//Subject:项目,通过Shiro保护的项目一个抽象概念
//通过令牌(token)与项目(subject)的登陆(login)关系,Shiro保证了项目整体的安全
//获取Subject单例对象
Subject subject = SecurityUtils.getSubject();
//如果获取不到用户名就是登录失败,但登录失败的话,会直接抛出异常
//登录
subject.login(token);
if (subject.hasRole("admin")) {
map.put("role","admin");
map.put("username",userlogin.getUsername());
}
return map;
}