智能销售系统-登录&角色
一、登录
1.准备登录页面,点击登录的js方法
<%–
Created by IntelliJ IDEA.
User: zhaoyi
Date: 2018/10/14
Time: 下午4:27
To change this template use File | Settings | File Templates.
–%>
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
用户名: |
密 码: |
登陆 重置 |
(2)完成登录功能
2.3.完成登录功能
2.3.1.EmployeeService:提供根据名称查询用户功能
@Override
public Employee findByUsername(String username) {
return employeeRepository.findByUsername(username);
}
2.3.2.JpaRealm:数据库数据
public class JpaRealm extends AuthorizingRealm {
@Autowired private IEmployeeService employeeService; 。。。 //AuthenticationInfo:认证; 身份验证; 证明 //登录的时候就会调用这个方法来做验证 @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { //身份认证(用户名) // 1.拿到用户名 UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken)token; String username = usernamePasswordToken.getUsername(); // 2.根据用户名到数据库拿到用户 Employee loginUser = employeeService.findByUsername(username); if(loginUser==null){ return null; //该用户名不存在 } //从数据库中拿到密码 Object credentials = loginUser.getPassword(); //加盐的数据 ByteSource byteSource = ByteSource.Util.bytes("itsource"); return new SimpleAuthenticationInfo(loginUser,credentials,byteSource,getName()); }
}
2.3.3.JsonResult:返回数据封装
//封装对象,确定返回值
public class JsonResult {
//是否操作成功 private boolean success = true; //相应的提示信息 private String msg; public JsonResult(){} public JsonResult(boolean success, String msg) { this.success = success; this.msg = msg; } 。。。
}
2.3.4.LoginController:登录功能
@RequestMapping(value="/login",method = RequestMethod.POST)
@ResponseBody
public JsonResult login(String username, String password){
//1.拿到访问的主体(当前登录用户)
Subject subject = SecurityUtils.getSubject();
//2.判断这个用户是否已经登录(通过验证)
if(!subject.isAuthenticated()){
//3.如果没有验证,就要完成登录
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
try{
//4.根据toke完成登录功能
subject.login(token);
}catch (UnknownAccountException e){
System.out.println(“用户名不存在!!”);
e.printStackTrace();
return new JsonResult(false,“账号或者密码出错!”);
}catch (IncorrectCredentialsException e){
System.out.println(“密码不存在!”);
e.printStackTrace();
return new JsonResult(false,“账号或者密码出错!”);
}catch (AuthenticationException e){
System.out.println(“登录出错!”);
e.printStackTrace();
return new JsonResult(false,“程序发生未知错误!”);
}
} return new JsonResult();
}
2.3.5.login.jsp:登录功能
function submitForm() {
$("#loginForm").form(“submit”, {
url : “/login”,
success : function(data) {
data = $.parseJSON(data);
if (data.success) {
location.href = “/main”;
} else {
$.messager.alert(“温馨提示”, data.msg, “info”);
}
}
});
}
function resetForm() {
$("#loginForm").form(“clear”);
}
2.4.其它功能
2.4.1.回车登录(理解代码即可)
$(document.documentElement).on(“keyup”, function(event) {
https://console.debug(event.keyCode);
var keyCode = event.keyCode;
console.debug(keyCode);
if (keyCode === 13) { // 捕获回车
submitForm(); // 提交表单
}
});
2.4.2.登录过期问题
// 检查自己是否是顶级页面
if (top != window) {// 如果不是顶级
//把子页面的地址,赋值给顶级页面显示
window.top.location.href = window.location.href;
}
2.4.3.展示用户名与注销
main.jsp:在资源中可以找到标签配置
源码时代智销系统
欢迎[]登录,退出SimpleAuthenticationInfo authenticationInfo =
new SimpleAuthenticationInfo(username,employee.getPassword(),salt,getName());
username:不是传用户名的,因为用户名早就可以通过token来获取到了,不需要再传进去
principal:主体(登录进去想把什么东西存起来,让shiro在任何地方都能拿到)
异常:ClassCastException(类转换异常)
//1.拿到当前用户
Subject subject = SecurityUtils.getSubject();
subject 中包含主体跟会话
subject.getPrincipal();
subject.getSession();(Shiro中的Session,不是http里面的)
把主体放入Session中会更方便
subject.getSession().setAttribute(“user_in_session”,subject.getPrincipal())
以后有很多地方都需要用到当前登录用户
每个登录用户有哪些权限应该从数据库中获取
SELECT DISTINCT(去重) p.* FROM employee e JOIN employee_role er ON er.employee_id = e.id JOIN role r ON r.id = er.role_id JOIN role_permission rp ON rp.role_id = r.id…
删除没有权限的时候:
普通请求会直接跳转页面
Ajax请求会返回JSON
怎么区分:Ajax有一个XMLHttpRequest(原生Ajax核心对象)
自定义shiro权限拦截器
shiro默认拦截器:PermissionAuthorizationFilter
因为这个类的父类里面的isAc…方法里面没有判断Ajax请求,是直接跳转,所以需要重写这个方法
只要有@ResponseBody(这个标签只能在Controller里面使用)就会自动帮我们转成JSON
自己写了一个这个,shiro并不知道,所以在shiro.xml配置一个bean然后设置自定义权限拦截器
- 智能销售系统登录和授权
- 智能销售系统技术心得——第四篇
- 智能销售系统的订单采购和报表
- 基于SSJ智能销售系统的模版开发-02
- 当系统中登录用户的角色和权限改变时的处理方法
- 基于角色的权限管理系统--前端登录数据js加密后端解密(DES)
- 智能销售系统day8
- 基于SSJ智能销售系统的模版开发-03
- Struts2不同角色登录系统
- 智能销售系统准备
- 简单的智能销售系统
- 几个SQL server登陆,登录,用户,角色和组用到的系统存储过程
- 智能商贸-实现shiro加密登录信息和角色权限关联
- 跟老紫竹学Java-图书销售系统-主页,注册,登录,退出登录等常规页面
- 智能销售系统技术心得——第二篇
- 基于SSJ智能销售系统的模版开发-04
- 基于Spring+SpringMVC+SpringDataJpa的智能销售系统
- SQL Server 2000登录,用户,角色,组用到的系统存储过程
- C语言链接mysql数据库,实现可以增删改查的角色权限登录系统
- 在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码