2018江苏省海门市建设局网站广州企业网站建设电话

当前位置: 首页 > news >正文

2018江苏省海门市建设局网站,广州企业网站建设电话,购物网站页面布局,雨燕直播转载自 : www.javaman.cn 1、编写工具类生成4位随机数 该工具类主要生成从0-9#xff0c;a-z#xff0c;A-Z范围内产生的4位随机数 /*** 产生4位随机字符串/public static String getCheckCode() {String base 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn… 转载自 : www.javaman.cn 1、编写工具类生成4位随机数 该工具类主要生成从0-9a-zA-Z范围内产生的4位随机数 /** 产生4位随机字符串/public static String getCheckCode() {String base 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz;int size base.length();Random r new Random();StringBuffer sb new StringBuffer();for (int i 1; i 4; i) {//产生0到size-1的随机值int index r.nextInt(size);//在base字符串中获取下标为index的字符char c base.charAt(index);//将c放入到StringBuffer中去sb.append©;}return sb.toString();}2、编写常量类 用户常量的绑定所有的常量都可以在ConfigConsts中定义方便管理。 import java.util.Arrays; import java.util.List;public interface ConfigConsts {/** 验证码存session/String IMAGE_CODE_SESSION IMAGE_CODE; }3、获取验证码接口 这段代码的主要作用是为用户生成一个图片验证码并将其显示在浏览器中。当调用该代码对应的URL时服务器会创建一个包含随机验证码的图片并将此验证码存储在用户的会话中然后将该图片发送给用户的浏览器显示 /** 验证码/RequestMapping(/getImgCode)public void getImgCode(HttpServletRequest request, HttpServletResponse response) {int width 80;int height 30;BufferedImage image new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//获取画笔Graphics graphics image.getGraphics();//设置画笔颜色为白色graphics.setColor(Color.white);//填充图片graphics.fillRect(0, 0, width, height);//设置画笔颜色为黑色graphics.setColor(Color.black);//设置字体的小大graphics.setFont(new Font(黑体, Font.BOLD, 24));//产生4个随机验证码String checkCode CommonUtil.getCheckCode();//将验证码放入HttpSession中HttpSession session request.getSession();session.setAttribute(ConfigConsts.IMAGE_CODE_SESSION, checkCode);//向图片上写入验证码graphics.drawString(checkCode, 15, 25);//将内存中的图片输出到浏览器try {response.setContentType(image/png);ImageIO.write(image, PNG, response.getOutputStream());} catch (IOException e) {e.printStackTrace();}}4、controller跳转到登录页 对“/loginPage”的GET请求并将用户重定向到登录页面。当调用这个URL时系统会返回一个名为login的视图通常是一个HTML页面这个视图通常用于显示登录表单让用户输入用户名和密码等信息。 /** 跳转到登陆页面* return 登陆页面/GetMapping(/loginPage)public String loginPage(){return login;}5、登录界面 在Web页面上实现一个图形验证码的输入功能 HTML部分 创建一个表单项内部包含两列使用layui的栅格系统。在第一列中有一个标签和一个文本输入框。标签用于显示一个验证码图标输入框用于用户输入图形验证码。在第二列中有一个图片元素用于显示图形验证码图片。 JavaScript部分 配置layui的静态资源路径和主入口模块。初始化时调用getImgCode函数加载验证码图片并渲染表单。getImgCode函数通过Ajax请求从服务器获取验证码图片并将其显示在页面上的图片元素中。
这段代码主要利用了layui框架来实现页面的布局和交互同时通过JavaScript和Ajax实现与服务器的通信以获取并显示图形验证码。 div classlayui-form-itemdiv classlayui-rowdiv classlayui-col-xs7label classlayadmin-user-login-icon layui-icon layui-icon-vercode/labelinput typetext namecode lay-verifyrequired placeholder图形验证码 classlayui-input/divdiv classlayui-col-xs5div stylemargin-left: 10px;img idcodeImg classlayadmin-user-login-codeimg/div/div/divscriptlayui.config({base: /static/layuiadmin/ //静态资源所在路径}).extend({index: lib/index //主入口模块}).use([index, user], function(){let \( layui.\),form layui.form;// 初始化getImgCode();form.render();}/**
获取验证码*/function getImgCode() {let url ctx /getImgCode;let xhr new XMLHttpRequest();xhr.open(GET, url, true);xhr.responseType blob;xhr.onload function() {if (this.status 200) {let blob this.response;document.getElementById(codeImg).src window.URL.createObjectURL(blob);}}xhr.send();}/script6、验证码过滤 校验验证码的过滤器基于Java的Spring框架。 该过滤器继承了OncePerRequestFilter确保每次请求只被过滤一次。在doFilterInternal方法中它首先检查请求是否是登录请求通过检查请求路径是否为/login以及请求方法是否为POST。如果是登录请求它会调用validate方法来校验验证码。validate方法从请求中获取验证码然后与会话中存储的验证码进行比对。如果验证码不存在、为空或不匹配将抛出异常。如果验证码校验失败过滤器会捕获异常并向响应中写入错误信息以JSON格式。如果请求不是登录请求过滤器不会进行验证码校验直接让请求继续向下执行通过调用filterChain.doFilter。如果登录请求成功通过验证码校验代码会继续执行后续的过滤器或处理器。 Component public class ValidateCodeFilter extends OncePerRequestFilter {Overrideprotected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {// 登陆请求if (/login.equals(httpServletRequest.getServletPath()) POST.equalsIgnoreCase(httpServletRequest.getMethod())){try {validate(httpServletRequest);} catch (Exception exception) {httpServletResponse.setCharacterEncoding(utf-8);httpServletResponse.setContentType(application/json;charsetUTF-8);PrintWriter writer httpServletResponse.getWriter();writer.write(JSON.toJSONString(Result.failure(exception.getMessage())));writer.flush();return;}}// 不是一个登录请求不做校验 直接通过filterChain.doFilter(httpServletRequest, httpServletResponse);}private void validate(HttpServletRequest request) {String code request.getParameter(code);if (StringUtils.isBlank(code)){throw new RuntimeException(验证码不能为空);}Object checkCode request.getSession(false).getAttribute(ConfigConsts.IMAGE_CODE_SESSION);if (Objects.isNull(checkCode)) {throw new RuntimeException(验证码不存在);}if (!StringUtils.equalsIgnoreCase(code,checkCode.toString())) {throw new RuntimeException(验证码不匹配);}request.getSession(false).removeAttribute(ConfigConsts.IMAGE_CODE_SESSION);} }7、集成mysecurity 集成Spring Security的安全配置类用于Web应用的安全性设置。 通过EnableWebSecurity和Configuration注解启用并配置Spring Security。使用EnableGlobalMethodSecurity(prePostEnabled true)来启用全局方法级别的安全性允许使用例如PreAuthorize和PostAuthorize等注解。定义了一个名为MySecurityConfig的配置类该类继承自WebSecurityConfigurerAdapter用于定制安全性设置。通过Autowired注入了一个名为validateCodeFilter的验证码过滤器实例。在configure(HttpSecurity http)方法中对应用的安全性进行了详细配置 允许所有人访问/loginPage和/getImgCode这两个路径不进行任何安全检查。对所有其他请求需要用户进行身份验证即需要登录后才能访问。在用户名和密码验证过滤器之前添加了一个自定义的验证码过滤器validateCodeFilter用于在登录过程中校验验证码。
这段代码的主要目的是增强Web应用的安全性限制了只有经过身份验证的用户才能访问应用的受保护资源。 Configuration EnableWebSecurity EnableGlobalMethodSecurity(prePostEnabled true) public class MySecurityConfig extends WebSecurityConfigurerAdapter {Autowiredprivate ValidateCodeFilter validateCodeFilter;Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests()// 放过.antMatchers(/loginPage, /getImgCode).permitAll().anyRequest().authenticated().and()// 过滤登录验证码.addFilterBefore(validateCodeFilter, UsernamePasswordAuthenticationFilter.class)}运行结果如下