AbstractSecurityWebApplicationInitializer
来源:互联网 发布:dota狐狸妈黑历史 知乎 编辑:程序博客网 时间:2024/06/05 19:21
注册 Filter:
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
FilterRegistration.Dynamic verificationCodeFilter = servletContext.addFilter(“verificationCodeFilter”, new VerificationCodeFilter());
verificationCodeFilter.addMappingForUrlPatterns(null, false, “/j_captcha.jpg”);
verificationCodeFilter.addMappingForUrlPatterns(null, false, “/index”);
}
jsp:
<c:url var="loginUrl" value="/index" /> <form action="${loginUrl}" method="post" class="form-horizontal"> <c:if test='${param.verifi != null}'> <div class="alert alert-success"> <p>验证码错误!</p> </div> </c:if> <label >验证码:</label> <input name="j_captcha" style="width: 60px" class="form-control" type="text" /> <img id="captchaImg" src="<c:url value='/j_captcha.jpg'/>" /> </div> </br> <input type="submit" value="登陆"/> <script type="text/javascript"> $("#captchaImg").click(function(){ $('#captchaImg').hide().attr( 'src', '<c:url value="/j_captcha.jpg"/>' + '?'+ Math.floor(Math.random() * 100) ).fadeIn(); }); </script> </form>
VerificationCode :
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* VerificationCode:
*
* dpica
*
*/
public class VerificationCode {
// 宽private static int WIDTH = 80;// 高private static int HEIGHT = 30;// 验证码数量private static int NUM = 4;// 干扰线数量private static int LINE = 4;private static char[] SHOWTEXT = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };/** * 生成随机的验证码 * * @return * @throws Exception */public void generator(HttpServletRequest request, HttpServletResponse response) throws Exception { Random r = new Random(); // 图片的内存映像 BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); // 获得画笔对象 Graphics g = image.getGraphics(); g.setColor(randomColor(200,250)); g.fillRect(0, 0, WIDTH, HEIGHT); g.setColor(new Color(0,0,0)); // 用于存储随机生成的验证码 StringBuffer number = new StringBuffer(); // 绘制验证码 for (int i = 0; i < NUM; i++) { g.setColor(randomColor(20,200)); int h = (int) ((HEIGHT * 50 / 100) * r.nextDouble() + (HEIGHT * 50 / 100)); g.setFont(new Font(null, Font.BOLD | Font.ITALIC, h)); String ch = String.valueOf(SHOWTEXT[r.nextInt(SHOWTEXT.length)]); number.append(ch); g.drawString(ch, i * WIDTH / NUM * 90 / 100, h); } // 绘制干扰线 for (int i = 0; i <= LINE; i++) { g.setColor(randomColor(100,200)); g.drawLine(r.nextInt(WIDTH), r.nextInt(HEIGHT), r.nextInt(WIDTH), r.nextInt(HEIGHT)); } request.getSession().setAttribute("imageCode", number.toString()); //System.out.println("----VerificationCode----" + number.toString()); g.dispose(); //有用 response.reset(); ImageIO.write(image, "jpeg", response.getOutputStream());}private Color randomColor(int fc, int bc) { Random random = new Random(); if (fc > 255) fc = 255; if (bc > 255) bc = 255; int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b);}
}
VerificationCodeFilter :
public class VerificationCodeFilter implements Filter {
@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) arg0; HttpServletResponse response = (HttpServletResponse) arg1; String code = request.getParameter("j_captcha"); String sessionCode = (String) request.getSession().getAttribute( "imageCode"); String servletPath = request.getServletPath(); String filterProcessesUrl = "/index"; if (StringUtils.startsWith(servletPath, filterProcessesUrl)) { if (code.equalsIgnoreCase(sessionCode)) { chain.doFilter(request, response); } else { response.sendRedirect("./login?verifi=true"); return; } } else { try { //response.sendRedirect("./login?verifi=true"); new VerificationCode().generator(request, response); } catch (Exception e) { e.printStackTrace(); } }}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}
- AbstractSecurityWebApplicationInitializer
- AndroidStudio上遇到的一些问题(2)
- 汉诺塔
- 关于x++和++x
- android开发6.0权限适配
- [Python]默认函数参数注意点
- AbstractSecurityWebApplicationInitializer
- CentOS 6.x 升级Python2.6.x到Python2.7.x
- 欢迎使用CSDN-markdown编辑器
- 使用JSPatch实现iOS APP动态更新
- iOS开发中常见得运行报错
- View的setTag()和getTag()方法
- jQuery动画与特效
- 异步触发器发送短信
- Hust oj 1293 取数(Map)