小功能实现:
1.iframe :页面嵌入
2. 注销:
-
过期处理
-
回车登录
问题 -
权限显式
2.双击方法,不能实现拿取选取行的数据,反而是name,url,sn
解决:方法应该onDblClickRow 而不是onDblClickCell
4.提交有数据,提交失败
解决:] 写错位置了
正确的
错误的
一.登录1.1 准备登录页面(随便找一个即可)位置:webapp/WEB-INF/views/login.jspjs代码部分 //登录功能
function submitForm(){
$(’#loginForm’).form(‘submit’, {
url:"/login",
onSubmit: function(){
return $(this).form(‘validate’);
},
success:function(data){
var result = JSON.parse(data);
if(result.success){
//成功后跳转到主页面
window.location.href = “/main”;
}else{
$.messager.alert(“提示”,result.msg,“error”);
}
}
});
}
1.2 LoginController功能1.2.1 两个login方法一个用于跳转(/login,get),一个用于登录(/login,post)@RequestMapping(value="/login",method = RequestMethod.GET)
public String index(){
return “login”;
}
/**
-
是一个Ajax的登录请求,它会返回{success:true/false,msg:xxx}
-
@return
*/
@RequestMapping(value="/login",method = RequestMethod.POST)
@ResponseBody
public JsonResult login(String username, String password){
…
}
1.2.2完成登录的功能@RequestMapping(value="/login",method = RequestMethod.POST)
@ResponseBody
public JsonResult login(String username, String password){
//1.拿到当前用户
Subject currentUser = SecurityUtils.getSubject();
//2.如果没有登录,进行登录
if(!currentUser.isAuthenticated()){
//3.准备令牌
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
//4.实现登录
try {
currentUser.login(token);
} catch (UnknownAccountException e) {
e.printStackTrace();
return new JsonResult(false, “用户名不存在!”);
} catch (IncorrectCredentialsException e) {
e.printStackTrace();
return new JsonResult(false, “账号或密码错误!”);
} catch (AuthenticationException e) {
e.printStackTrace();
// System.out.println(“就是登录不了(请联系程序员…)”);
return new JsonResult(false, “网络出错(联系管理员)!”);
}
}
//登录成功成功令牌
return new JsonResult();
}
1.3 登录细节1.3.1 数据库的密码设置要有一套自己的密码规则(md5,10次,盐值:itsource)a.MD5Utilpublic class MD5Util {public static final String SALT = “itsource”;
public static final Integer HASHITERATIONS = 10;//密码加密
public static String changePwd(String password){
SimpleHash hash = new SimpleHash(“MD5”,password,SALT,HASHITERATIONS);
return hash.toHex();
}
}
b.添加用户密码加密controller或者service中都可以进行[我们选择service]@Override
public void save(Employee employee) {
if(employee.getId()==null){
//添加功能就进行密码修改
employee.setPassword(MD5Util.changePwd(employee.getPassword()));
}
employeeRepository.save(employee);
}
c.加密的判断必需和规则一致applicationContext-shiro.xml(编码方式与次数)
b.登录过期login.jsp// 检查自己是否是顶级页面
if (top != window) {// 如果不是顶级
//把子页面的地址,赋值给顶级页面显示
window.top.location.href = window.location.href;
}
c.回车登录login.jsp$(document.documentElement).on(“keyup”, function(event) {
//console.debug(event.keyCode);
var keyCode = event.keyCode;
console.debug(keyCode);
if (keyCode === 13) { // 捕获回车
submitForm(); // 提交表单
}
});
d.展示用户名与注销main.jsp<%@ taglib prefix=“shiro” uri=“http://shiro.apache.org/tags” %>
…
2.1.3 只增不减的问题修改的时候只能添加不能减少@ModelAttribute(“editRole”)
public Role beforeEdit(Long id,String cmd){
//修改的时候才查询(只要有id会就进行一次查询,这是不对的)
if(id!=null && “update”.equals(cmd)) {
Role role = roleService.findOne(id);
//把要传过来的关联对象都清空,就可以解决n-to-n的问题
role.getPermissions().clear();
return role;
}
return null;
}