如果用户没有登录直接访问的话

所有要求全部转到登录页面登录才可访问

以此实现了初步的安全管理

搭建的ssm框架无法访问jsp页面SSM框架Filter登录后对权限进行甄别没有权限弗成拜访指定页面 SQL

之前去口试也是被问到了这个问题

ps:讲真,现在真的有好多安全控件儿,用这个的还能有多少

好吧,作为根本,毕竟笔者也是新人一枚

话说回来,讲到之前口试被问到这个问题

也便是,在登录成功之后,那么后续的

比如一些只有leader才能利用的管理页面怎么去拦截呢

总不能你登录之后,从某些渠道得到了内页的登录地址

然后直接输入地址就可以访问内页了?

当然是不可能的

本日更新:小白篇:关于内页访问的权限校验

当然还是利用Filter....毕竟别的笔者是真的不会啊,哈哈哈哈

代码:以之前的登录拦截为根本

SSM框架利用Filter实现页面不上岸拦截,禁止跳过登录逼迫访问

今日代码:

public class UrlFilter implements Filter{@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// TODO 对全栈url进行过滤//将request和response工具强转为http类型HttpServletRequest req=(HttpServletRequest)request;HttpServletResponse resp = (HttpServletResponse)response;//获取访问的地址String url = req.getRequestURI();//许可所有人访问的地址,全部定义到数组中String[] urls={\公众tologin.do\"大众,\"大众login.do\"大众,\"大众error.do\"大众,\"大众logout.do\"大众,\"大众top.do\"大众,\公众left.do\公众,\"大众right.do\公众};//用来判断用户当前访问地址是否在不上岸可访问的权限内boolean contains=true;for(String u:urls){//url的截取7:由于我的uri根中是 “/dscms/” 共七个字符,根据个人情形,如果没有,不用截取if(url.substring(7).equals(u)){contains=false;}}//获取session中的工具判断是否登录//拦截所有的 .do 要求但不包含tologin.do//jsp文件已经封装到webinf下 不用过滤 之过滤 .do要求即可if(url.contains(\公众.do\"大众)&contains) {//获取sessionHttpSession session = req.getSession();TUser user=(TUser) session.getAttribute(\公众USER\"大众);if(user==null){//如果用户为空,解释没有登录,返回到登录页面resp.sendRedirect(\公众/dscms/tologin.do\"大众);chain.doFilter(req, resp);}else {//用户不为空,解释用户登录了,访问网址的时候验证权限 //验证权限,如果当前访问地址没有在用户权限范围内提示地址缺点 if(chkPermission(req)){ //连续实行过滤连的剩余部分 chain.doFilter(req, resp); }else { //没有权限访问,返回缺点代码或者自己定义的缺点页面 resp.sendError(404); //resp.sendRedirect(\"大众../error.do\公众);chain.doFilter(req, resp); } }}chain.doFilter(req, resp);}//判断当前地址权限是否在用户权限范围内private boolean chkPermission(HttpServletRequest request){ //1、获取用户当前访问的uri String uri=request.getRequestURI().substring(7); //1.1 判断当前uri访问须要的权限id//截取当前uri对应的权限地址并查询//根据权限地址查询权限idSystem.out.println(uri);//获取permission实例:filter中是无法自动注入的,由于这样天生两个该filter的实例A和B(A:tomcat之类的容器管理,B为spring管理) //2、获取当前用户的权限凑集TUser user=(TUser)request.getSession().getAttribute(\公众USER\"大众);List<TPermission> permissions = user.getPermissions();//遍历用户当前权限列表,判断权限for(TPermission pers:permissions) {if(pers.getUrl()!=null&&!\公众\公众.equals(pers.getUrl())){if (pers.getUrl().equals(uri)) {//2.1 、判断,如果当前uri的id在用户权限凑集中返回truereturn true;}}}//2.2、 如果不在权限中,返回falsereturn false; }@Overridepublic void destroy() {// TODO Auto-generated method stub}}

之前的文章上面也发出来了

本日用的还是以之前的Filter类作为根本

在用户登录之后,连续加了一层验证

也便是在判断用户已经登录之后

if(user==null){//如果用户为空,解释没有登录,返回到登录页面resp.sendRedirect(\"大众/dscms/tologin.do\"大众);chain.doFilter(req, resp);}else {//用户不为空,解释用户登录了,访问网址的时候验证权限 //验证权限,如果当前访问地址没有在用户权限范围内提示地址缺点 if(chkPermission(req)){ //连续实行过滤连的剩余部分 chain.doFilter(req, resp); }else { //没有权限访问,返回缺点代码或者自己定义的缺点页面 resp.sendError(404); //resp.sendRedirect(\"大众../error.do\"大众);chain.doFilter(req, resp); } }

也便是这里连续校验

下面封装了一个chkPermission()方法

如果写在一起实在显得臃肿

//判断当前地址权限是否在用户权限范围内private boolean chkPermission(HttpServletRequest request){ //1、获取用户当前访问的uri String uri=request.getRequestURI().substring(7); //1.1 判断当前uri访问须要的权限id//截取当前uri对应的权限地址并查询//根据权限地址查询权限idSystem.out.println(uri);//获取permission实例:filter中是无法自动注入的,由于这样天生两个该filter的实例A和B(A:tomcat之类的容器管理,B为spring管理) //2、获取当前用户的权限凑集TUser user=(TUser)request.getSession().getAttribute(\"大众USER\"大众);List<TPermission> permissions = user.getPermissions();//遍历用户当前权限列表,判断权限for(TPermission pers:permissions) {if(pers.getUrl()!=null&&!\"大众\公众.equals(pers.getUrl())){if (pers.getUrl().equals(uri)) {//2.1 、判断,如果当前uri的id在用户权限凑集中返回truereturn true;}}}//2.2、 如果不在权限中,返回falsereturn false; }

开始的时候本来是想要去校验权限的id,但是后来创造其实用substring去截取其实更大略一点(字符串真的操作真的很主要)平时要常看看

还有一点:filter中是不能利用Autowired的,如果须要利用注入的话,可以如下

ServletContext context = request.getServletContext(); ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context); SessionService sessionService = ctx.getBean(SessionService.class);

还记得这个把,刚开始打仗spring的时候

通过been.xml去过去,怎么说呢,手动配置加载这样

用框架多了,很多以前的根本都忘了

根本实在才是最主要的,框架千万种,万变不离其宗

只要根本稳定,什么框架都不在话下

可是假如你只会框架,恐怕到时候真的碰着问题就真的老大难咯

末了:关于权限还有部分没有实现——关于部分用户拥有只读权限,部分用户拥有全部操作权限这部分,个人想法是在权限表中在多加一个字段,验证的时候去验证详细 只读/操作,不知道大家有没有什么更好的办法,欢迎评论区谈论留言哈