1.问题描述
现在网站大多是自行注册账户,但是也有一些内部网站,比较特别,不能自行注册账户,只能由管理员创建.那么问题就来了,管理员创建了一个新账户之后,怎么知道新账户的权限是多少呢?正常业务逻辑应该是,管理员注销账户,然后用刚创建的新用户登录系统,查看相关的权限控制怎么样.
这里问题就来了,管理员平时管理的事务也是很多的,总是一次又一次的注销登录,很是麻烦.
于是就提出了这样一个需求,是否可以管理员账户登录时,可以任意切换其他账户,不需要输入密码,不能出现登录页面.
2.问题分析
从问题中,可以分析出,说是直接切换,实际上还是先退出,再登录,只不过是这些操作不需要前台操作栏,通过后台进行退出和重新登录操作,然后前台页面自动刷新,变成新用户登录上去的初始化页面.
3.实现方法逻辑
登录方法:正常登录方法,空参登录方法.
登出方法:正常登出方法.
页面触发用户切换时,先触发正常登出方法,再进行登录,同时页面重定向到初始页面.
4.页面和代码实现
页面:
frame.jsp
JavaScript代码:
function openUser(){
//获取session中的登录名
var userName = '${sessionScope.UserInfo.LOGIN_ID}';
//判断登录名是否为管理员账户,是打开用户列表,否给出提示信息
if (userName == "admin"){
var $inserts = $("#openUserDialog");
$inserts.dialog('open');
}else{
//不是管理员,不允许切换用户
$.messager.alert("提示信息","没有权限","info");
return ;
}
}
//初始化用户列表数据
$(function(){
$(window).resize(
function(){
$('#user_table').datagrid('resize');
});
});
//用户列表页面支持模糊查询
function searchUser(){
var params = {};
params.loginid=$('#input_search').val();
params.username=$('#input_search').val();
$('#user_table').datagrid('options').queryParams=params;
$('#user_table').datagrid('reload');
}
//选择要切换的用户所触发的方法
function toSelected(id){
//管理员
var user_id = '${sessionScope.UserInfo.USER_ID}';
var url = appBase + "/pages/frame/user/UserAction.jsp?eaction=user_info";
var new_user_id = id;
//判断是否获取到所切换到的用户id
if(new_user_id == null || new_user_id == ''){
$.messager.alert("提示信息","请选择登录用户名!","info");
return;
}
//前台页面获取选中用户的用户密码
var passw;
$.ajax({
type : "post",
url : url,
data : {"userid":new_user_id},
async : true,
success : function(data){
var res = JSON.parse(data);
passw=res.password;
var login_id = res.loginId;
if(passw == null || passw == ''){
$.messager.alert("提示信息","缺少用户信息,无法登陆!","info");
}else{
//根据用户id和密码进行用户信息切换,并关闭用户列表框
doChangeUser(login_id,passw);
var $inserts = $("#openUserDialog");
$inserts.dialog('close');
}
}
});
}
function doChangeUser(login_id,passw){
var url_out = appBase+ "logout.e";
var url_login = appBase+ "login.e";
var datas = {user:login_id,pwd:passw};
//登出
$.post(url_out, null, function(data){});
//登录
$.post(url_login, datas, function(data){
//页面重定向到登录初始页面
top.location = url_login;
});
}
//初始化用户列表操作栏方法
HTML代码:(注:使用的easy框架)
后台代码:
正常login代码片段:
Map user_info = absLogin.login(user,pwd,runner);
if(user_info != null){
//将用户信息放入session中--省略
return "/pages/frame/Frame.jsp";
}else{
request.setAttribute("LoginMsg","用户或密码错误");
return "/index.jsp";
}
无参login代码片段:
return "/pages/frame/Frame.jsp";
登出代码(略):
5.结果展示