三.五 配置静态资源,添加过滤器
以前的 MvcConfig 静态资源配置
@Configuration public class MvcConfig extends WebMvcConfigurerAdapter { /** * 配置静态的资源信息 * @param registry */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); //映射 static 目录 registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); //放置其他 业务页面资源 registry.addResourceHandler("/**").addResourceLocations("classpath:/templates/"); } @Override public void addInterceptors(InterceptorRegistry registry) { //注册自己的拦截器并设置拦截的请求路径 registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**"); super.addInterceptors(registry); } }
三.六 配置静态资源
三.六.一 static 目录下添加库
三.六.二 templates 目录下 添加静态页面
login.html 是登录页, main.html 是登录后的展示主页 noPrivilege 是没有权限展示的页面
add delete select update 是 添加,删除,查询,修改的页面,表示 员工的权限。
login.html
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>登录页面</title> <link rel="StyleSheet" href="static/bootstrap/css/bootstrap.css" type="text/css"> <script type="text/javascript" src="static/jquery-1.11.3.min.js"></script> <script type="text/javascript" src="static/bootstrap/js/bootstrap.js"></script> </head> <script> $(function(){ $("#submit").click(function(){ var code=$("#code").val(); var password=$("#password").val(); var info=new Object(); //传入进去,员工的id编号 info.account=code; info.password=password; $.post("User/login",info,function(data){ if(data.code==200){ alert("登录成功"); window.location.href="toMain"; }else{ alert("用户名或者密码错误"); } },"json") }) }) </script> <body> <div class="col-sm-6 col-sm-offset-3"> <div style="margin-top:40px;"> <div class="row col-md-offset-3 "> <h3>登录页面</h3> </div> <div class="row" style="margin-top:30px;"> <form class="form-horizontal" role="form"> <div class="form-group"> <label for="code" class="col-md-3 control-label">用户名:</label> <div class="col-md-4"> <input type="text" class="form-control" id="code" name="code" value=""/> </div> </div> <div class="form-group"> <label for="password" class="col-md-3 control-label">密码:</label> <div class="col-md-4"> <input type="password" class="form-control" id="password" name="password"/> </div> </div> <div class="form-group"> <div class="col-sm-offset-4"> <input type="button" value="登录" id="submit" class="btn btn-success"/> </div> </div> </form> </div> </div> </div> </body> </html>
main.html
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>登录成功,展示首页</title> </head> <body> 登录成功 <span> <a href="javascript:void(0);" onclick="window.location.href='User/logout'">退出</a> </span> </body> </html>
其他的页面,都是一句话描述
<body> 抱歉,您没有权限访问!!! </body>
<body> 添加用户 </body>
<body> 删除用户 </body>
<body> 查询用户 </body>
<body> 修改用户 </body>
三.七 页面跳转 Controller PageController
@Controller public class PageController { @RequestMapping("/toLogin") //跳转到登录页面 public String toLogin(){ return "login"; } @RequestMapping("/toMain") //跳转到登录页面 public String toMain(){ return "main"; } @RequestMapping("/add") //跳转到登录页面 public String add(){ return "add"; } @RequestMapping("/update") //跳转到登录页面 public String update(){ return "update"; } @RequestMapping("/select") //跳转到登录页面 public String select(){ return "select"; } @RequestMapping("/delete") //跳转到登录页面 public String delete(){ return "delete"; } }
三.八 员工的登录和注销
UserController.java
@Controller @RequestMapping("/User") public class UserController { @Autowired private UserService userService; @RequestMapping("/login") @ResponseBody public OutputResult login(User userInfo, HttpSession session){ //将请求信息,封装到对象里面。 Map<String,Object> map=new HashMap<String,Object>(); //从数据库中查询密码 User user=userService.findByAccountAndPassword(userInfo.getAccount(), userInfo.getPassword()); if(null==user){ return OutputResult.fail(); } //说明登录成功,放置到session里面 session.setAttribute("loginUser",user); //模拟设置权限 List<String> privileges=getPrivilegeByAccount(user.getAccount()); session.setAttribute("privilegeList_"+user.getId(),privileges); //登录成功 return OutputResult.success(user); } /** * 模拟权限 yzl 有 添加的 权限, zxh有 delete的权限。 都没有 update 的权限 * @date 2021/10/21 17:39 * @author zk_yjl * @param account * @return java.util.List<java.lang.String> */ private List<String> getPrivilegeByAccount(String account) { List<String> privileges = new ArrayList<>(); privileges.add("/select"); privileges.add("/toMain"); privileges.add("/logout"); if("yzl".equals(account)){ privileges.add("/add"); }else{ privileges.add("/delete"); } return privileges; } @RequestMapping("/logout") //退出登录 public String logout(HttpSession session){ //注销 session.invalidate(); return "login"; }
其中 OutputResult 与以前是一样的.
/** * @ClassName:OutputResult * @Description 返回的响应实体信息 * @Author 岳建立 * @Date 2021/1/1 10:09 * @Version 1.0 **/ @Data public class OutputResult implements Serializable { /** * @param code 响应代码 * @param message 响应信息 * @param data 响应的数据 */ private Integer code; private String message; private Map<String,Object> data=new HashMap<String,Object>(); /** * 构造方法 私有。 避免外部构造 */ private OutputResult(){ } /** * 成功 * @return */ public static OutputResult fail(){ OutputResult outputResult=new OutputResult(); outputResult.code=500; outputResult.message="失败"; return outputResult; } /** * 成功 * @return */ public static OutputResult success(){ OutputResult outputResult=new OutputResult(); outputResult.code=200; outputResult.message="成功"; return outputResult; } /** * 成功 * @param data 要响应的数据 * @return */ public static OutputResult success(Object data){ OutputResult outputResult=new OutputResult(); outputResult.code=200; outputResult.message="成功"; outputResult.data.put("result",data); return outputResult; } }
三.九 模拟验证
将项目进行打包, 然后启动项目.
启动 8081 端口的项目
java -jar learn-1.0-SNAPSHOT.jar --spring.profiles.active=808
启动8082的端口的项目
java -jar learn-1.0-SNAPSHOT.jar --spring.profiles.active=8082
在 8081 项目上 直接 请求 /select 进行查询, 会跳转到登录的页面
输入正确的用户名和密码, yzl/12345 会登录进去
可以进行查询
但是如果是修改和删除的话
是没有权限的
直接访问 8082 项目,查询 select 用户, 是可以直接访问的
如果在 8081 项目上 退出登录
那么在 8081项目上会退出,
同时8082 项目上,也将无法访问
这是整合 Spring-Session的基本用法。