MyErrorAttributes.java
package com.mengxuegu.springboot.component;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.WebRequest;
import java.util.Map;
public class MyErrorAttributes extends DefaultErrorAttributes {
/**
* 自定义数据进行响应
* @param webRequest
* @param includeStackTrace
* @return
*/
@Override
public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
Map<String, Object> map = super.getErrorAttributes(webRequest, includeStackTrace);
map.put("company", "mengxuegu.com");
return map;
}
}
MyLocaleResolver.java
package com.mengxuegu.springboot.component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
public class MyLocaleResolver implements LocaleResolver {
Logger logger = LoggerFactory.getLogger(getClass());
//解析区域信息
@Override
public Locale resolveLocale(HttpServletRequest httpServletRequest) {
//获取自定义请求头信息
String l = httpServletRequest.getParameter("l");
logger.info("解析区域信息:" + l);
//获取浏览器上的区域信息
Locale locale = httpServletRequest.getLocale();
//获取当前操作系统 默认的区域信息
// Locale locale = Locale.getDefault();
if(!StringUtils.isEmpty(l)) {
String[] split = l.split("_");
//接收第1个参数为:语言代码, 国家代码
locale = new Locale(split[0], split[1]);
}
logger.info("最终采用的区域信息:" + locale.getLanguage() + "_" + locale.getCountry());
return locale;
}
@Override
public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
}
}
DruidConfig.java
package com.mengxuegu.springboot.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.Filter;
import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* 绑定Druid相关信息
*/
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid() {
return new DruidDataSource();
}
/**
* 配置一个druid的监控
* 1. 配置一个druid的后台 管理servlet
* 2. 配置一个druid的filter
*
*/
// 1. 配置一个druid的后台管理servlet
@Bean
public ServletRegistrationBean statViewServlet() {
//注意:请求是 /druid/*
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
//设置初始化参数值
Map<String, String> initParam = new HashMap<>();
initParam.put(StatViewServlet.PARAM_NAME_USERNAME, "root");
initParam.put(StatViewServlet.PARAM_NAME_PASSWORD, "123");
//如果不写,则默认所有ip都可以访问
initParam.put(StatViewServlet.PARAM_NAME_ALLOW, "");
initParam.put(StatViewServlet.PARAM_NAME_DENY, "192.168.10.1");
bean.setInitParameters(initParam);
return bean;
}
//2. 配置一个druid的filter
@Bean
public FilterRegistrationBean webStatFilter() {
FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
bean.setFilter(new WebStatFilter());
Map<String, String> initPrams = new HashMap<>();
initPrams.put(WebStatFilter.PARAM_NAME_EXCLUSIONS, "*.js,*.css,/druid/*");
bean.setInitParameters(initPrams);
//设置拦截请求
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}
MySpringMvcConfigurer.java
package com.mengxuegu.springboot.config;
import com.mengxuegu.springboot.component.MyLocaleResolver;
import com.mengxuegu.springboot.interceptor.LoginHandlerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
*/
@Configuration
public class MySpringMvcConfigurer {
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurer(){
//添加视图控制
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("main/login");
registry.addViewController("/index.html").setViewName("main/login");
registry.addViewController("/main.html").setViewName("main/index");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor())
//指定要拦截的请求 /** 表示拦截所有请求
.addPathPatterns("/**")
//排除不需要拦截的请求路径
.excludePathPatterns("/", "/index.html", "/login")
//springboot2+之后需要将静态资源文件的访问路径 也排除
.excludePathPatterns("/css/*", "/img/*","/js/*");
}
};
}
//区域解析器
@Bean
public LocaleResolver localeResolver() {
return new MyLocaleResolver();
}
}
BillController.java
package com.mengxuegu.springboot.controller;
import com.mengxuegu.springboot.dao.ProviderDao;
import com.mengxuegu.springboot.entities.Bill;
import com.mengxuegu.springboot.entities.BillProvider;
import com.mengxuegu.springboot.entities.Provider;
import com.mengxuegu.springboot.mapper.BillMapper;
import com.mengxuegu.springboot.mapper.ProviderMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
*/
@Controller
public class BillController {
Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
ProviderMapper providerMapper;
@Autowired
BillMapper billMapper;
@GetMapping("/bills")
public String list(Map<String, Object> map, Bill bill) {
logger.info("帐单列表查询。。。" + bill);
List<BillProvider> billProviders = billMapper.getBills(bill);
//获取所有的供应商
List<Provider> providers = providerMapper.getProviders(null);
map.put("billProviders", billProviders);
map.put("providers", providers);
//用于搜索处回显数据
map.put("billName", bill.getBillName());
map.put("pid", bill.getPid());
map.put("pay", bill.getPay());
return "bill/list";
}
/**
* type = null 进入查看详情页面view.html,
* type=update 则是进入update.html
* @return
*/
@GetMapping("/bill/{bid}")
public String view(@PathVariable("bid") Integer bid,
@RequestParam(value="type", defaultValue = "view") String type,
Map<String, Object> map) {
logger.info("查询" + bid + "的详细信息");
BillProvider billProvider = billMapper.getBillByBid(bid);
if( "update".equals(type)) {
List<Provider> providers = providerMapper.getProviders(null);
map.put("providers", providers);
}
map.put("billProvider", billProvider);
// type = null 则进入view.html, type=update 则是进入update.html
return "bill/" + type;
}
//修改信息
@PutMapping("/bill")
public String update(Bill bill) {
logger.info("更改信息。。。");
//更新操作
billMapper.updateBill(bill);
return "redirect:bills";
}
//前往添加 页面
@GetMapping("/bill")
public String toAddPage(Map<String, Object> map) {
//查询所有供应端
// List<Provider> providers = providerMapper.getProviders(null);
map.put("providers", providerMapper.getProviders(null) );
return "bill/add";
}
//添加数据
@PostMapping("/bill")
public String add(Bill bill) {
logger.info("添加数据" + bill);
//保存数据操作
billMapper.addBill(bill);
return "redirect:/bills";
}
//删除
@DeleteMapping("/bill/{bid}")
public String delete(@PathVariable("bid") Integer bid) {
logger.info("删除操作, bid=" + bid);
billMapper.deteleBillByBid(bid);
return "redirect:/bills";
}
}
LoginController.java
package com.mengxuegu.springboot.controller;
import com.mengxuegu.springboot.entities.User;
import com.mengxuegu.springboot.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import javax.servlet.http.HttpSession;
import java.util.Map;
/**
*/
@Controller
public class LoginController {
@Autowired
UserMapper userMapper;
@PostMapping("/login")
public String login (HttpSession session, String username, String password, Map<String, Object> map) {
if(!StringUtils.isEmpty(username)
&& !StringUtils.isEmpty(password)) {
User user = userMapper.getUserByUsername(username);
if(user != null && user.getPassword().equals(password)) {
//登录成功
session.setAttribute("loginUser", user);
//重定向 redirect:可以重定向到任意一个请求中(包括其他项目),地址栏改变
return "redirect:/main.html";
}
}
//登录失败
map.put("msg", "用户名或密码错误");
return "main/login";
}
/**
* 退出登录
* @return
*/
@GetMapping("/logout")
public String logout(HttpSession session) {
//1. 清空session中的用户信息
session.removeAttribute("loginUser");
//2. 再将session进行注销
session.invalidate();
//3. 返回登录页面
return "redirect:/index.html";
}
}
ProviderController.java
package com.mengxuegu.springboot.controller;
import com.mengxuegu.springboot.dao.ProviderDao;
import com.mengxuegu.springboot.entities.Provider;
import com.mengxuegu.springboot.mapper.ProviderMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 供应商的控制层
*/
@Controller
public class ProviderController {
Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
ProviderDao providerDao;
@Autowired
ProviderMapper providerMapper;
@GetMapping("/providers")
public String list(Map<String, Object> map, Provider provider) {
logger.info("供应商列表查询。。。" + provider);
List<Provider> providers = providerMapper.getProviders(provider);
map.put("providers", providers);
map.put("providerName", provider.getProviderName());
return "provider/list";
}
/**
* type = null 进入查看详情页面view.html,
* type=update 则是进入update.html
* @param pid 供应商id
* @param type
* @param map
* @return
*/
@GetMapping("/provider/{pid}")
public String view(@PathVariable("pid") Integer pid,
@RequestParam(value="type", defaultValue = "view") String type,
Map<String, Object> map) {
logger.info("查询" + pid + "的供应商详细信息");
Provider provider = providerMapper.getProviderByPid(pid);
map.put("provider", provider);
// type = null 则进入view.html, type=update 则是进入update.html
return "provider/" + type;
}
//修改供应商信息
@PutMapping("/provider")
public String update(Provider provider) {
logger.info("更改供应商信息。。。");
//更新操作
providerMapper.updateProvider(provider);
return "redirect:providers";
}
//前往添加 页面
@GetMapping("/provider")
public String toAddPage() {
return "provider/add";
}
//添加数据
@PostMapping("/provider")
public String add(Provider provider) {
logger.info("添加供应商数据" + provider);
//保存数据操作
providerMapper.addProvider(provider);
return "redirect:/providers";
}
//删除供应商
@DeleteMapping("/provider/{pid}")
public String delete(@PathVariable("pid") Integer pid) {
logger.info("删除操作, pid=" + pid);
providerMapper.deleteProviderByPid(pid);
return "redirect:/providers";
}
}
UserController.java
package com.mengxuegu.springboot.controller;
import com.mengxuegu.springboot.dao.ProviderDao;
import com.mengxuegu.springboot.entities.Provider;
import com.mengxuegu.springboot.entities.User;
import com.mengxuegu.springboot.mapper.ProviderMapper;
import com.mengxuegu.springboot.mapper.UserMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;
/**
* 供应商的控制层
*/
@Controller
public class UserController {
Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
UserMapper userMapper;
@GetMapping("/users")
public String list(Map<String, Object> map, User user) {
logger.info("用户列表查询。。。" + user);
List<User> users = userMapper.getUsers(user);
map.put("users", users);
map.put("username", user.getUsername());
return "user/list";
}
/**
* type = null 进入查看详情页面view.html,
* type=update 则是进入update.html
*/
@GetMapping("/user/{id}")
public String view(@PathVariable("id") Integer id,
@RequestParam(value="type", defaultValue = "view") String type,
Map<String, Object> map) {
logger.info("查询" + id + "的详细信息");
User user = userMapper.getUserById(id);
map.put("user", user);
// type = null 则进入view.html, type=update 则是进入update.html
return "user/" + type;
}
//修改供应商信息
@PutMapping("/user")
public String update(User user) {
logger.info("更改信息。。。");
//更新操作
userMapper.updateUser(user);
return "redirect:users";
}
//前往添加 页面
@GetMapping("/user")
public String toAddPage() {
return "user/add";
}
//添加数据
@PostMapping("/user")
public String add(User user) {
logger.info("添加数据" + user);
//保存数据操作
userMapper.addUser(user);
return "redirect:/users";
}
//删除
@DeleteMapping("/user/{id}")
public String delete(@PathVariable("id") Integer id) {
logger.info("删除操作, id=" + id);
userMapper.deleteUserById(id);
return "redirect:/users";
}
@GetMapping("/user/pwd")
public String toUpdatePwdPage() {
return "main/password";
}
@ResponseBody
@GetMapping("/user/pwd/{oldPwd}")
public Boolean checkPwd(HttpSession session, @PathVariable("oldPwd") String oldPwd) {
logger.info("旧密码:" + oldPwd);
//1.从Session中获取当前登录用户的User对象
User user = (User) session.getAttribute("loginUser");
if(user.getPassword().equals(oldPwd)) {
//输入的旧密码正确
return true;
}
return false;
}
@PostMapping("/user/pwd")
public String updatePwd(HttpSession session, String password) {
//1.从Session中获取当前登录用户信息
User user = (User) session.getAttribute("loginUser");
//2. 更新密码
user.setPassword(password);
//3. 提交到数据库
userMapper.updateUser(user);
//4. 注销重新登录
return "redirect:/logout";
}
}
BillDao.java
package com.mengxuegu.springboot.dao;
import com.mengxuegu.springboot.entities.Bill;
import com.mengxuegu.springboot.entities.Provider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@Repository
public class BillDao {
private static Map<Integer, Bill> billMap = null;
private static Integer initId = 3006;
@Autowired
private ProviderDao providerDao;
static {
billMap = new HashMap<Integer, Bill>();
billMap.put(3001, new Bill(3001, "Bi-AA11", "粮油aaa", "斤", 80,480.8, new Provider(2002, "PR-BB", "梦学谷供应商222", "小李", "18888666982", "深圳软件园", "0911-0123453", "品质B"), 1));
billMap.put(3002, new Bill(3002, "Bi-BB11", "粮油bbb", "斤", 90,390.9,new Provider(2001, "PR-AA", "梦学谷供应商111", "小张", "18888666981", "深圳软件园", "0911-0123456", "品质A"), 2));
billMap.put(3003, new Bill(3003, "Bi-CC11", "鲜花", "朵", 99,199.9, new Provider(2003, "PR-CC", "梦学谷供应商333", "小白", "18888666983", "深圳软件园", "0911-0123454", "品质C"), 1));
billMap.put(3004, new Bill(3004, "Bi-DD11", "电脑", "台", 10,100000.1, new Provider(2004, "PR-DD", "梦学谷供应商444", "小梦", "18888666984", "深圳软件园", "0911-0123451", "品质D"), 1));
billMap.put(3005, new Bill(3005, "Bi-EE11", "手机", "部", 8,50000.6, new Provider(2005, "PR-EE", "梦学谷供应商555", "小谷", "18888666985", "深圳软件园", "0911-0123452", "品质E"), 2));
}
public void save(Bill bill){
if(bill.getBid() == null){
bill.setBid(initId++);
}
//添加供应商
bill.setProvider( providerDao.getProvider( bill.getProvider().getPid() ));
billMap.put(bill.getBid(), bill);
}
public Collection<Bill> getAll(){
return billMap.values();
}
/**
* 搜索查询
* @param bill
* @return
*/
public Collection<Bill> getAll(Bill bill){
Collection<Bill> bills = getAll();
if (!StringUtils.isEmpty(bill.getBillName())) {
//
}
if (bill.getProvider().getPid() != null) {
//
}
if (bill.getPay() != null) {
//
}
return bills;
}
public Bill get(Integer id){
return billMap.get(id);
}
public void delete(Integer id){
billMap.remove(id);
}
}
LoginHandlerInterceptor.java
package com.mengxuegu.springboot.interceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 定义登录拦截器
*/
public class LoginHandlerInterceptor implements HandlerInterceptor {
//调用目标方法之前被拦截
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object loginUser = request.getSession().getAttribute("loginUser");
if( loginUser != null) {
//已经登录过,放行
return true;
}
//没有登录过
request.setAttribute("msg", "没有权限,请先登录!");
request.getRequestDispatcher("/index.html").forward(request, response);
return false;
}
}