关于CAS服务端登录前ajax访问后台方法被拦截的配置

来源:互联网 发布:js删除数组中某个元素 编辑:程序博客网 时间:2024/06/06 00:14

前两天项目上使用的cas单点登录需要添加微信登录功能,与移动开发组的同事沟通后,发现需要在cas服务端添加二维码生成和对数据库相关操作的代码,在实现真正登录前,通过一定逻辑的ajax请求访问后台自定义的方法,实现二维码生成和相关数据库操作。

去年10月份研究了cas单点登录,目前已经实现了三个客户端+一台cas认证服务的统一门户功能,认证服务器支持个人用户名、身份证号、手机号和密码匹配验证,也支持法人用户名密码登录认证,先如今需要添加二维码扫码登录。研究cas由于知道其底层采用spring webflow结合spring mvc实现的,于是自己定义的方法也使用spring mvc注解的方式实现请求转发。下面按步骤进行配置:

1.在spring-configuration文件夹下添加springmvc-config.xml文件

  因为web.xml中默认配置的是加载spring-configuration路径下的所有xml(/WEB-INF/spring-configuration/*.xml),所以直接在spring-configuration下配置springmvc-config.xml文件。以下为配置内容:

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- MVC注解驱动 --><mvc:annotation-driven /><!-- 配置扫描器,使得@Controller注解生效 --><context:component-scan base-package="com.casit" /></beans>

2.在casLoginView.jsp中任意添加ajax用于访问后台的自定义类和方法

 $("#test").click(function(){            $.ajax({                url : "${ctx}/qRCodeOperation/erCodeLogin",                dataType : "text",                type : "get",                success : function(data){                    console.info(data);                }            });        })
3.后台新增QRCodeOperation类和ERCodeLogin方法,由于使用spring JdbcDAOSupport类自带的JdbcTemplate方法,因此需要在applicationContext.xml中定义jdbcTemplate的bean并注入dataSource,并在使用类中通过spring属性注入的方式将jdbcTemplate实体注入。

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.support.JdbcDaoSupport;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;@Controller@RequestMapping("/qRCodeOperation")public class QRCodeOperation {        @Autowired    private JdbcTemplate jdbcTemplate;        @RequestMapping("/erCodeLogin")    @ResponseBody    public String ERCodeLogin(){        String usernm = jdbcTemplate.queryForObject("select usernm from sys_user where loginnm=?", String.class, "fagw" );        System.out.println("usernm : " + usernm);        return usernm;    }}
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">          <property name = "dataSource" ref="dataSource" />  </bean>

4.由于cas对非法请求都会默认进行拦截,所以在web.xml中配置不拦截的地址栏(注意url-pattern中不能使用*代替,必须使用指定的url路径,我反正试了/qRCodeOperation/*没用)。

<servlet-mapping>    <servlet-name>cas</servlet-name>    <url-pattern>/qRCodeOperation/erCodeLogin</url-pattern>  </servlet-mapping>

至此,就可以通过ajax访问到cas自定义的后台了。


注意:经过测试发现在对springmvc-config.xml中加mvc注解驱动的时候,返回到页面上的中文为乱码,因此修改mvc注解驱动为以下:

<!-- MVC注解驱动 --><mvc:annotation-driven><mvc:message-converters register-defaults="true"><!-- 将StringHttpMessageConverter的默认编码设为UTF-8 --><bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8" /></bean></mvc:message-converters></mvc:annotation-driven>


阅读全文
2 0
原创粉丝点击