我正在尝试将Friend身份验证和授权集成到Clojure/Compojure单页Web应用程序中.
我有一个由Angular控制器支持的登录表单,该控制器使用AJAX对Web应用程序验证用户名和密码,并获取经过身份验证的用户记录.因此,我不希望Friend基于表单的登录提供默认行为 - 我基本上想要依赖HTTP状态代码,而且我不想要任何朋友页面重定向.
例如,制作未经身份验证的请求应该只返回401状态代码,而不应重定向到"/ login".我通过在配置好友时指定自定义的":unauthenticated-handler"(下面包含的代码)来完成此部分.
在成功登录后,我只需要200状态代码,而不是重定向到最初请求的页面.这是我无法工作的.
我根据各种示例编写了一个自定义的朋友身份验证工作流程(我的Clojure技能现在是初学者级别):
(defn my-auth
[& {:keys [credential-fn]}]
(routes
(GET "/logout" req
(friend/logout* {:status 200}))
(POST "/login" {{:keys [username password]} :params}
(if-let [user-record (-> username credential-fn)]
(if
(and
[user-record password]
(creds/bcrypt-verify password (:password user-record)))
(let [user-record (dissoc user-record :password)]
(workflows/make-auth user-record {:cemerick.friend/workflow :my-auth :cemerick.friend/redirect-on-auth? true}))
{:status 401})
{:status 401}))))
Run Code Online (Sandbox Code Playgroud)
这是我的中间件声明的处理程序:
(def app
(->
(handler/site
(friend/authenticate app-routes
{:credential-fn (partial creds/bcrypt-credential-fn my-credential-fn)
:unauthenticated-handler unauthenticated
:workflows [(my-auth :credential-fn my-credential-fn)]}))
(session/wrap-session)
(params/wrap-keyword-params)
(json/wrap-json-body)
(json/wrap-json-response {:pretty true})))
Run Code Online (Sandbox Code Playgroud)
以及上面引用的附加处理函数: …
我想使用烂番茄API搜索电影.
我有一个使用TMDB而不是烂番茄的等效的完全工作的应用程序.
我使用JBoss RESTEasy提供的标准JAX-RS客户端和RESTEasy Jackson2提供程序(我当然不能发布我的API密钥):
public MovieSearchResults search(String query) {
return client
.target("http://api.rottentomatoes.com/api/public/v1.0/movies.json")
.queryParam("apikey", API_KEY)
.queryParam("q", query)
.request(MediaType.APPLICATION_JSON)
.get(MovieSearchResults.class);
}
Run Code Online (Sandbox Code Playgroud)
MovieSearchResults类只是一个用于绑定JSON的JAXB注释类.
直接的问题是Rotten Tomatoes API正在为其所有JSON响应返回内容类型为"text/javascript"的响应.他们表现出不愿意改变他们的服务,即使这显然是在返回JSON时设置的错误内容类型,所以现在它就是它的本质.
我调用服务时遇到的异常是:
Exception in thread "main"
javax.ws.rs.client.ResponseProcessingException:
javax.ws.rs.ProcessingException:
Unable to find a MessageBodyReader of
content-type text/javascript;charset=ISO-8859-1 and type class MovieSearchResults
Run Code Online (Sandbox Code Playgroud)
所以问题是:是否有一种简单的方法来获取/配置标准JAX-RS客户端以将返回的"text/javascript"内容类型识别为"application/json"?
我在Android上使用QtQuick/QML/Qt5.2.1.我也在桌面而不是Android上测试了这个问题,我也看到了同样的问题.
我用来LocalStorage在应用程序关闭后保留应用程序数据.
我用以下方法打开数据库openDatabaseSync:
var db = LocalStorage.openDatabaseSync(
"TestDB",
"1.0", <-- version
"Test Database",
1000000,
function(db) {
createSchema(db);
populateData(db);
}
);
Run Code Online (Sandbox Code Playgroud)
如果数据库不存在并且已创建,则会执行回调函数,在这种情况下,我会创建数据库模式并填充初始数据集.
下次应用程序启动时,显然我想保持数据库原样,而不是重新创建它.
问题是当我重新启动应用程序时出现此错误:
Error: SQL: database version mismatch
Run Code Online (Sandbox Code Playgroud)
如果我检查在第一次运行应用程序时创建数据库时创建的.ini文件,我会看到:
[General]
Description=Test Database
Driver=QSQLITE
EstimatedSize=1000000
Name=TestDB
Version=
Run Code Online (Sandbox Code Playgroud)
您可以清楚地看到这里的问题是"版本"属性为空.
当应用程序启动时,它会将请求的版本"1.0"与此空字符串""进行比较并失败.
我可以通过将版本指定为""或通过修复ini文件来伪造它以使其工作 - 至少告诉我代码是正确的 - 但显然这不是解决方案.
那么,我错过了什么或者这是一个Qt错误吗?
我看到Hue API在"日光"传感器上提供了地理位置和日出/日落偏移的字段.
再具体一点:
lat
long
sunriseoffset
sunsetoffset
Run Code Online (Sandbox Code Playgroud)
目前发布的API未提供有关如何使用日出/日落的任何信息.
如果我使用更新传感器API来设置纬度和经度,日出/日落偏移是否会自动填充数据,我可以查询这些以相应地调整我的光照时间表?我想做的事情,例如"每天,日落时开灯+ 20分钟".
我本人要自己实现必要的算法,但是根据这些领域我需要做什么?
测试时,我更新了传感器配置的纬度和经度,这是更新后查询传感器结果的转储:
{
"state": {
"daylight":false,
"lastupdated":"2014-11-06T19:19:31"
},
"config": {
"on":true,
"long":"1.5333W",
"lat":"56.2442N",
"sunriseoffset":30,
"sunsetoffset":-30
},
"name":"Daylight",
"type":"Daylight",
"modelid":"PHDL00",
"manufacturername":"Philips",
"swvversion":"1.0"
}
Run Code Online (Sandbox Code Playgroud)
您可以看到我设置的纬度和经度值(默认情况下它们是"无").
现在很明显,日出和日落偏移不是计算值.它们用于配置传感器值何时从白天跳到非白天或反之亦然 - 例如,日出变为真正的"日出偏移"日出后几分钟.
桥梁是否知道给定地理位置的日出和日落时间?
如果是这样,我是否可以可靠地查询此传感器以确定日照或日照,并考虑日出和日落?
我使用vlc媒体播放器的vlcj库做了一个视频播放器。
这是我的代码来做到这一点..
public class Player {
public static void main(final String[] args) {
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files\\VideoLAN\\VLC");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Player(args);
}
});
}
private Player(String[] args) {
JFrame frame = new JFrame("vlcj Tutorial");
MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory();
Canvas c = new Canvas();
c.setBackground(Color.black);
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(c, BorderLayout.CENTER);
frame.add(p, BorderLayout.CENTER);
EmbeddedMediaPlayer mediaPlayer = mediaPlayerFactory.newEmbeddedMediaPlayer();
mediaPlayer.setVideoSurface(mediaPlayerFactory.newVideoSurface(c));
frame.setLocation(100, 100);
frame.setSize(1050, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
mediaPlayer.playMedia("D:\\EmbeddedMediaPlayer\\test.3gp");
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用此代码播放视频,但是如何像 vlc 媒体播放器一样在全屏上看到相同的视频? …
JavaVM WARNING: JAWT_GetAWT must be called after loading a JVM
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Can't load JAWT
at com.sun.jna.Native.getWindowHandle0(Native Method)
at com.sun.jna.Native$AWT.getComponentID(Native.java:1879)
at com.sun.jna.Native.getComponentID(Native.java:253)
at uk.co.caprica.vlcj.player.embedded.videosurface.CanvasVideoSurface.attach(CanvasVideoSurface.java:69)
at uk.co.caprica.vlcj.player.embedded.DefaultEmbeddedMediaPlayer.attachVideoSurface(DefaultEmbeddedMediaPlayer.java:156)
at uk.co.caprica.vlcj.player.embedded.DefaultEmbeddedMediaPlayer.onBeforePlay(DefaultEmbeddedMediaPlayer.java:315)
at uk.co.caprica.vlcj.player.DefaultMediaPlayer.play(DefaultMediaPlayer.java:705)
at uk.co.caprica.vlcj.player.DefaultMediaPlayer.playMedia(DefaultMediaPlayer.java:222)
at viziosecure360.Travizia.AddPlayer(Travizia.java:675)
at viziosecure360.Travizia.setDefault(Travizia.java:234)
at viziosecure360.Travizia$1.run(Travizia.java:187)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Run Code Online (Sandbox Code Playgroud)